文章目录
345. 反转字符串中的元音字母
给你一个字符串 s
,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 'a'、'e'、'i'、'o'、'u'
,且可能以大小写两种形式出现不止一次。
示例 1:
输入:s = "IceCreAm"
输出:"AceCreIm"
解释:
s 中的元音是 ['I', 'e', 'e', 'A']。反转这些元音,s 变为 "AceCreIm".
示例 2:
输入:s = "leetcode"
输出:"leotcede"
提示:
- 1 <= s.length <= 3 * 10^5
- s 由 可打印的 ASCII 字符组成
Go代码
func reverseVowels(s string) string {
// 定义左右两个指针,左指针遇到元音大小写时停下
// 右指针遇到元音大小写时也停下,然后交互他们两个的位置即可
// 由于要用到交换元素,所以先将字符串转为切片
sb := []byte(s)
left,right := 0,len(s)-1
for left < right {
for left < right && !isValid(sb[left]) {
left++
}
for right > left && !isValid(sb[right]) {
right--
}
// 交换两个元素,然后两个指针都移动一下
sb[left],sb[right] = sb[right],sb[left]
left++
right--
}
return string(sb)
}
// 是否元音大小写
func isValid(c byte) bool {
switch c {
case 'a','e','i','o','u','A','E','I','O','U':
return true
default :
return false
}
}