Files
golang-w5/reverse.go
2025-10-08 19:30:27 +08:00

32 lines
360 B
Go

package reverse
import "unicode/utf8"
func swap(a *byte, b *byte) {
*a ^= *b
*b ^= *a
*a ^= *b
}
func reverse(b []byte) {
for i := 0; i < len(b); {
_, sz := utf8.DecodeRune(b[i:])
l := i
r := i + sz - 1
for l < r {
swap(&b[l], &b[r])
l++
r--
}
i += sz
}
l := 0
r := len(b) - 1
for l < r {
swap(&b[l], &b[r])
l++
r--
}
}