字符串 - 反转字符串
这里我们以力扣344题为例,讲讲如何在Go中反转字符串。
题目要求不能申请新的的空间。
总的来说,其实也是用双指针的方式
left和right进行位置互换而已
func reverseString(s []byte) {
for left, right := 0, len(s)-1; left < len(s)/2; left, right = left+1, right-1 {
s[left], s[right] = s[right], s[left]
}
}
需要注意的是,我们需要遍历多少次。假如我们遍历len(s)次,那么结果和原来的字符串是一样的,不信可以试试😂
结论是我们只需要交换len(s)/2次而已。
这道题其实不难的,接下来引出一个关于Go中的面试题:如何反转字符串,字符串中有中文、大小写字母、特殊字符等等。
// str = "你好,世界;hello world"
func reverseString(str string) {
strRune := []rune(str)
for left, right := 0, len(strRune)-1; left < len(strRune)/2; left, right = left+1, right-1 {
strRune[left], strRune[right] = strRune[right], strRune[left]
}
}
具体的实现代码还是和之前的一样,不过需要注意的是,在Go中,关于中文的处理,如果我们使用[]byte类型保存中文的话,会出现乱码的问题,Go考虑到这些情况,特意定义了一个rune类型,他其实就是int32的别名,byte是uint8的别名。就只有这个需要注意而已。
然后又可以引出一个在此基础上的题目,就是回文字符串。我们可以先反转,在对比,一致就是回文,否则不是。