345. Reverse Vowels of a String*
https://leetcode.com/problems/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"
.
C++ 实现 1
两年前的代码, 实现的简洁. 注意 vowels 不要忘了大写字母.
class Solution {
public:
string reverseVowels(string s) {
string vowels = "aeiouAEIOU";
unordered_set<char> record(vowels.begin(), vowels.end());
int l = 0, r = s.size() - 1;
while (l < r) {
while (l < r && !record.count(s[l]))
l++;
while (l < r && !record.count(s[r]))
r--;
std::swap(s[l++], s[r--]);
}
return s;
}
};
C++ 实现 2
现今的实现. 用了额外的空间.
class Solution {
public:
string reverseVowels(string s) {
unordered_set<char> record{'a', 'e', 'i', 'o', 'u',
'A', 'E', 'I', 'O', 'U'};
vector<char> vowels;
for (auto &c : s)
if (record.count(c)) vowels.push_back(c);
std::reverse(vowels.begin(), vowels.end());
int k = 0;
for (auto &c : s)
if (record.count(c)) c = vowels[k++];
return s;
}
};