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

55 阅读1分钟

题目:
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。

元音字母包括 'a''e''i''o''u',且可能以大小写两种形式出现。
算法:
看上去简单,双层for循环,注意内部循环是否越界,容易出错

var VowelMap = map[byte]struct{}{
	'a':struct{}{},
	'e':struct{}{},
	'i':struct{}{},
	'o':struct{}{},
	'u':struct{}{},
	'A':struct{}{},
	'E':struct{}{},
	'I':struct{}{},
	'O':struct{}{},
	'U':struct{}{},
}
func reverseVowels(s string) string {
	left, right := 0, len(s) - 1
	ans := make([]byte, len(s))
	for i := range s {
		ans[i] = s[i]
	}
	for left < right {
		for left < right && !isVowel(s[left]) {
			left ++ 
		}
		for left < right && !isVowel(s[right]) {
			right --
		}
		if left >= right {
			break
		}
		ans[left], ans[right] = ans[right], ans[left]
		left ++
		right --

	}
	return string(ans)
}

func isVowel(b byte) bool {
	if _, ok := VowelMap[b]; ok {
		return true
	}
	return false
}