# 344. Reverse String - LeetCode Best Practices
Visit original link: [344. Reverse String - LeetCode Best Practices](https://leetcoder.net/en/leetcode/344-reverse-string) for a better experience!
LeetCode link: [344. Reverse String](https://leetcode.com/problems/reverse-string), difficulty: **Easy**.
## LeetCode description of "344. Reverse String"
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](https://en.wikipedia.org/wiki/In-place_algorithm) 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](https://en.wikipedia.org/wiki/ASCII#Printable_characters).
### [Hints]
Hint 1
The entire logic for reversing a string is based on using the opposite directional two-pointer approach!
## Intuition
1. 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.
2. Use **two pointers** with **opposite directions**, initially one pointer points to the index `0` and the other pointer points to the index `s.length - 1`.
3. Traverse the elements of the array, and the loop condition is `while (left < right)`. In the loop body, `left += 1`, `right -= 1`.
4. In the loop body, swap the two values.
5. The above is the template for `two pointers` in `opposite directions`.
## Steps
1. Use two pointers with **opposite directions**, initially one pointer points to the index `0` and the other pointer points to the index `s.length - 1`.
```ruby
left = 0
right = s.length - 1
```
2. Traverse the elements of the array, and the loop condition is `while (left < right)`. In the loop body, `left += 1`, `right -= 1`.
```ruby
left = 0
right = s.length - 1
while left < right # 1
left += 1 # 2
right -= 1 # 3
end
```
3. In the loop body, swap the two values.
```ruby
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
```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
```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++
```cpp
class Solution {
public:
void reverseString(vector& s) {
auto left = 0;
auto right = s.size() - 1;
while (left < right) {
swap(s[left], s[right]);
left++;
right--;
}
}
};
```
## JavaScript
```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#
```csharp
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
```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
```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
```
## Other languages
```java
// Welcome to create a PR to complete the code of this language, thanks!
```
Dear LeetCoders! For a better LeetCode problem-solving experience, please visit website [leetcoder.net](https://leetcoder.net): Dare to claim the best practices of LeetCode solutions! Will save you a lot of time!
Original link: [344. Reverse String - LeetCode Best Practices](https://leetcoder.net/en/leetcode/344-reverse-string).
GitHub repository: [f*ck-leetcode](https://github.com/fuck-leetcode/fuck-leetcode).