345. Reverse Vowels of a String
Write a function that takes a string as input and reverse only the vowels of a string.
Example 1:
Input: "hello"
Output: "holle"
Example 2:
Input: "leetcode"
Output: "leotcede"
Note:
The vowels does not include the letter “y”.
方法1:two pointers
思路:
从两端扫,遇到两个元音就交换,直至相遇。效率不高。
class Solution {
public:
string reverseVowels(string s) {
int i = 0, j = s.size() - 1;
unordered_set<char> hash = {'a', 'e', 'i', 'o', 'u', 'A','E','I','O','U'};
while (i < j){
if (hash.find(s[i]) == hash.end()) i ++;
else if (hash.find(s[j]) == hash.end()) j --;
else {
swap(s[i], s[j]);
i ++;
j --;
}
}
return s;
}
};
方法2:
思路:
和上一种方法思路差不多,但可以换成string t = “aeiouAEIOU”,然后用string的自带函数word.find_first_of(t, left)。left是搜索起始的位置。相应的用word.find_last_of(t, right)找到右边最后一个,进行交换。
易错点
不要忘记找到后left++,right–,否则停住不会动。
class Solution {
public:
string reverseVowels(string s) {
int left = 0, right = s.size() - 1;
while (left < right) {
left = s.find_first_of("aeiouAEIOU", left);
right = s.find_last_of("aeiouAEIOU", right);
if (left < right) {
swap(s[left++], s[right--]);
}
}
return s;
}
};