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,反转结束,返回字符数组即可。

具体实现 #

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))
}