344. 反转字符串

344. 反转字符串 #

题目地址 #

解题思路 #

双指针法 #

对于长度为N的待被反转的字符数组,我们可以观察反转前后下标的变化,假设反转前字符数组为s[0] s[1] s[2] ... s[N - 1],那么反转后字符数组为s[N - 1] s[N - 2] ... s[0]。比较反转前后下标变化很容易得出s[i]的字符与s[N - 1 - i]的字符发生了交换的规律,因此我们可以得出如下双指针的解法:

  • left指向字符数组首元素,right指向字符数组尾元素。
  • left < right
    • 交换s[left]s[right]
    • left指针右移一位,即left = left + 1
    • right指针左移一位,即right = right - 1
  • left >= right,反转结束,返回字符数组即可。

具体实现 #

```go package main import ( "fmt" ) func reverseString(s []byte) { length := len(s) if length == 0 { return } left, right := 0, length-1 for left < right { tmp := s[left] s[left] = s[right] s[right] = tmp left++ right-- } return } func main() { x := []byte{'1', '2', '3'} reverseString(x) fmt.Println(string(x)) } ```