1、Reverse Vowels of a String
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”.
Note:
The vowels does not include the letter “y”.
class Solution {
public:
bool isVowel(char c) {
if(c=='a'||c=='A'||c=='e'||c=='E'||c=='i'||c=='I'||c=='o'||c=='O'||c=='u'||c=='U')
return true;
else
return false;
}
std::string reverseVowels(std::string s) {
if (s.length() <= 1) return s;
int i = 0;
int j = s.length() - 1;
while (j != i) {
if (isVowel(s[i]) && isVowel(s[j]))
std::swap(s[i++], s[j--]);
if (j == i || abs(j - i) == 1) break;
if (!isVowel(s[i])) i++;
if (!isVowel(s[j])) j--;
}
return s;
}
};
反转的经典算法就是头尾swap,所以设两个下标,从两头向中间走。
若都是元音,交换;
若只有一个是元音,是元音的停住,不是的接着走;
直到走到两个下标相遇,或者只差1;