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
,反转结束,返回字符数组即可。
具体实现 #
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))
}