字元串反轉
即 abc 反轉後成 cba
思路:兩邊都設定一個遊标,然後互換位置,遊标同步向中間移動,再互換。
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}
用byte會亂碼
func main() {
src2 := "你好aaa李煥英"
dst2 := reverse([]byte(src2))
fmt.Printf("%v\n", string(dst2))
}
func reverse(s []byte) []byte {
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}
return s
}
因為byte是 uint8 遇到中文會有截斷。
換成 rune 完美解決
結論
func main() {
src := "你好aaa李煥英"
dst := reverse([]rune(src))
fmt.Printf("%v\n", string(dst))
}
func reverse(s []rune) []rune {
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}
return s
}