方法一:
思路:双指针对撞的思想
//思路:双指针进行对撞的思想,左边指针指向一个字母,右边指针指向一个字母func reverseOnlyLetters(s string) string {//转换为byte数组sTemp := []byte(s)//l指向左侧字母,r指向右侧字母l, r := 0, len(s)-1for l < r {//不断循环让l指向左侧字母for l <= len(s)-1 && !unicode.IsLetter(rune(s[l])) {l++}//不断循环让r指向右侧字母//注意判断r没有越界for r >= 0 && !unicode.IsLetter(rune(s[r])) {r--}if l >= len(s) || r < 0 || l >= r {break}//交换l与rsTemp[l], sTemp[r] = sTemp[r], sTemp[l]//然后改变l与rl++r--}return string(sTemp)}
对上面的代码进行改进之后的代码:
//对上面代码进行优化func reverseOnlyLetters(s string) string {//转换为byte数组sTemp := []byte(s)//l指向左侧字母,r指向右侧字母l, r := 0, len(s)-1for l < r {//不断循环让l指向左侧字母for l < r && !unicode.IsLetter(rune(s[l])) {l++}//不断循环让r指向右侧字母//注意判断r没有越界for r > l && !unicode.IsLetter(rune(s[r])) {r--}if l >= r {break}//交换l与rsTemp[l], sTemp[r] = sTemp[r], sTemp[l]//然后改变l与rl++r--}return string(sTemp)}
