问题描述

请实现⼀个算法,在不使⽤额外数据结构和储存空间的情况下,翻转⼀个给定的字符串(可以使⽤单个过程变量)。

解题思路

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