题目要求:
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现不止一次。
示例 1:
输入: s = "hello"
输出: "holle"
示例 2:
输入: s = "leetcode"
输出: "leotcede"
提示:
1 <= s.length <= 3 * 105
s由 可打印的 ASCII 字符组成
解题思路
使用双指针,主要是双指针中的碰撞指针,l指针从左遍历,r指针从右遍历,当l是元音时,判断r是否元音,如果两个都是元音,则进行交换。注意,这里设计到byte和string类型的切换,需要注意。
代码:
func reverseVowels(s string) string {
// 双指针做法,左右指针都是元音时,进行交换
l, r := 0, len(s)-1
b := []byte(s)
for l < r {
// 校验左边是否元音,不是元音校验下一个
for l < r && !strings.Contains("aeiouAEIOU", string(b[l])) {
l++
}
// 校验右边是否元音,不是元音校验下一个
for r > l && !strings.Contains("aeiouAEIOU", string(b[r])) {
r--
}
// 两边都是元音的时候进行交换
b[l], b[r] = b[r], b[l]
l++
r--
}
return string(b)
}