天天看點

GO 字元串反轉

字元串反轉

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