问题描述
请实现⼀个算法,在不使⽤额外数据结构和储存空间的情况下,翻转⼀个给定的字符串(可以使⽤单个过程变量)。
解题思路
str[len]str[0]str[0]str[len]
stringrune
func reverseString(s *string) {
str := []rune(*s)
n := len(str)
for i := 0; i < n / 2; i++ {
str[i], str[n - i - 1] = str[n - i - 1], str[i]
}
*s = string(str)
}
测试
s := "123456789"
reverseString(&s)
fmt.Println(s)
// 输出:
// 987654321
扩展
reverseString()nm
123456789456789123
我们可以将前三个字符翻转,再将后六个字符翻转,最后翻转整个字符串即可。
s := "123456789"
s1 := s[:3]
s2 := s[3:]
reverseString(&s1)
reverseString(&s2)
s = s1 + s2
reverseString(&s)
fmt.Println(s)
// 输出:
// 456789123