题目:
给你一个字符串 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
}