Fuck LeetCode > Array > 344. Reverse String > Solved in Java, Python, C++, JavaScript, C#, Go, Ruby > Repost or Contribute
LeetCode link: 344. Reverse String, difficulty: Easy.
Write a function that reverses a string. The input string is given as an array of characters s
.
You must do this by modifying the input array in-place with O(1)
extra memory.
Example 1:
Input: s = ["h","e","l","l","o"]
Output: ["o","l","l","e","h"]
Example 2:
Input: s = ["H","a","n","n","a","h"]
Output: ["h","a","n","n","a","H"]
Constraints:
1 <= s.length <= 10^5
s[i]
is a printable ascii character.
Hint 1
The entire logic for reversing a string is based on using the opposite directional two-pointer approach!
Intuition
- This problem can be solved in one line of code using the built-in
sort()
method of the programming language. If this question is asked in an interview, the questioner should be testing how to do it without the built-in method. - Use two pointers with opposite directions, initially one pointer points to the index
0
and the other pointer points to the indexs.length - 1
. - Traverse the elements of the array, and the loop condition is
while (left < right)
. In the loop body,left += 1
,right -= 1
. - In the loop body, swap the two values.
- The above is the template for
two pointers
inopposite directions
.
Steps
Use two pointers with opposite directions, initially one pointer points to the index
0
and the other pointer points to the indexs.length - 1
.left = 0 right = s.length - 1
Traverse the elements of the array, and the loop condition is
while (left < right)
. In the loop body,left += 1
,right -= 1
.left = 0 right = s.length - 1 while left < right # 1 left += 1 # 2 right -= 1 # 3 end
In the loop body, swap the two values.
left = 0 right = s.length - 1 while left < right s[left], s[right] = s[right], s[left] # 1 left += 1 right -= 1 end
Complexity
Time complexity
O(N)
Space complexity
O(1)
Java #
class Solution {
public void reverseString(char[] s) {
var left = 0;
var right = s.length - 1;
while (left < right) {
var leftValue = s[left];
s[left] = s[right];
s[right] = leftValue;
left++;
right--;
}
}
}
Python #
class Solution:
def reverseString(self, s: List[str]) -> None:
left = 0
right = len(s) - 1
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
C++ #
class Solution {
public:
void reverseString(vector<char>& s) {
auto left = 0;
auto right = s.size() - 1;
while (left < right) {
swap(s[left], s[right]);
left++;
right--;
}
}
};
JavaScript #
var reverseString = function (s) {
let left = 0
let right = s.length - 1
while (left < right) {
[s[left], s[right]] = [s[right], s[left]]
left++
right--
}
};
C# #
public class Solution
{
public void ReverseString(char[] s)
{
int left = 0;
int right = s.Length - 1;
while (left < right)
{
(s[left], s[right]) = (s[right], s[left]);
left++;
right--;
}
}
}
Go #
func reverseString(s []byte) {
left := 0
right := len(s) - 1
for left < right {
s[left], s[right] = s[right], s[left]
left++
right--
}
}
Ruby #
def reverse_string(s)
left = 0
right = s.size - 1
while left < right
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
end
end