LeetCode 每日一题 345. 反转字符串中的元音字母
345. 反转字符串中的元音字母
难度简单
Given s = "leetcode", return "leotcede".
使用双指针,一个指针从头向尾遍历,一个指针从尾到头遍历,当两个指针都遍历到元音字符时,交换这两个元音字符。
为了快速判断一个字符是不是元音字符,我们将全部元音字符添加到集合 HashSet 中,从而以 O(1) 的时间复杂度进行该操作。
- 时间复杂度为 O(N):只需要遍历所有元素一次
- 空间复杂度 O(1):只需要使用两个额外变量
代码:
class Solution {
public:
// #define print(x, y) cout << "line:" << __LINE__ << "\t" << x << " = " << y << endl
#define print
unordered_set<char> vowel = {'a','e','i','o','u','A','E','I','O','U'};
string reverseVowels(string s) {
for (int i = 0, j = s.size(); i < s.size(), i < j; i++, j--)
{
while(i < j && vowel.find(s[i]) == vowel.end()) i++;
while(i < j && vowel.find(s[j]) == vowel.end()) j--;
print('i', i);
print('j', j);
char t = s[i];
s[i] = s[j];
s[j] = t;
print('s', s);
}
return s;
}
};