Write a function that takes a string as input and reverse only the vowels of a string.
Example 1:
Given s = "hello", return "holle".
Example 2:
Given s = "leetcode", return "leotcede".
这道题是颠倒字符串中元音的次序,题目难度为Easy。
可以从字符串的头部向后、尾部向前分别找元音,当找到一对元音时交换他们,直到两个遍历的位置相遇即完成了元音的倒序。具体代码:
class Solution {
bool isVowel(char ch) {
return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u'
|| ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U';
}
public:
string reverseVowels(string s) {
int lIdx = 0, rIdx = s.size()-1;
bool lRdy = false, rRdy = false;
while(lIdx < rIdx) {
while(lIdx < rIdx && !lRdy) {
if(isVowel(s[lIdx])) lRdy = true;
else lIdx++;
}
while(lIdx < rIdx && !rRdy) {
if(isVowel(s[rIdx])) rRdy = true;
else rIdx--;
}
if(lRdy && rRdy) swap(s[lIdx++], s[rIdx--]);
lRdy = false;
rRdy = false;
}
return s;
}
};