字符串 - 反转字符串

54 阅读1分钟

字符串 - 反转字符串

这里我们以力扣344题为例,讲讲如何在Go中反转字符串。

image.png 题目要求不能申请新的的空间。 image.png 总的来说,其实也是用双指针的方式 leftright进行位置互换而已

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的别名,byteuint8的别名。就只有这个需要注意而已。

然后又可以引出一个在此基础上的题目,就是回文字符串。我们可以先反转,在对比,一致就是回文,否则不是。