leetcode-345. 反转字符串中的元音字母

64 阅读1分钟

题目要求:

给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。 元音字母包括 'a''e''i''o''u',且可能以大小写两种形式出现不止一次。

示例 1:
输入: s = "hello"
输出: "holle"

示例 2:
输入: s = "leetcode"
输出: "leotcede"

提示
1 <= s.length <= 3 * 105
s 由 可打印的 ASCII 字符组成

链接leetcode.cn/problems/re…

解题思路

使用双指针,主要是双指针中的碰撞指针,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)
}