> For the complete documentation index, see [llms.txt](https://wentao-shao.gitbook.io/leetcode/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wentao-shao.gitbook.io/leetcode/string/344.reverse-string.md).

# 344.Reverse-String

## 344. Reverse String

## 题目地址

<https://leetcode.com/problems/reverse-string/>

## 题目描述

```
Write a function that reverses a string. The input string is given as an array of characters char[].

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

You may assume all the characters consist of printable ascii characters.

Example 1:
Input: ["h","e","l","l","o"]
Output: ["o","l","l","e","h"]

Example 2:
Input: ["H","a","n","n","a","h"]
Output: ["h","a","n","n","a","H"]
```

## 代码

### Approach #1 Recursion, in-Place O(N) Space

```java
class Solution {
  public void reverseString(char[] s) {
    helper(s, 0, s.length - 1)
  }

  private void helper(char[] s, int left, int right) {
        if (left >= right)    return;
    char tmp = s[left];
    s[left++] = s[right];
    s[right--] = tmp;
    helper(s, left, right);
  }

}
```

### Approach 2: Two Pointers, Iteration, O(1) Space

```java
class Solution {
  int left = 0, right = s.length - 1;
  while (left < right) {
    char tmp = s[left];
    s[left++] = s[right];
    s[right--] = tmp;
  }
}
```
