题目描述
给你一个字符串 s
,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 'a'
、'e'
、'i'
、'o'
、'u'
,且可能以大小写两种形式出现不止一次。
示例 1:
**输入:**s = “hello”
输出:“holle”
示例 2:
**输入:**s = “leetcode”
输出:“leotcede”
提示:
1 <= s.length <= 3 * 10^5
s
由 可打印的 ASCII 字符组成
题解
这道题可以先将元音字母(包括大小写)存入容器中以供查询,逆序循环字符串,当遇到元音字母时,就存入队列中,并且标记对应位置。之后在顺序循环,依次在元音字母的位置,从队列的对头取出元音字母,赋值给字符串。
最核心的是通过队列从对头的方式实现了元音字母的反转和记住元音字母的位置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| class Solution {
public:
string reverseVowels(string s) {
set<char> words{'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
vector<bool> v(s.size(), false);
queue<char> re;
for (int i = s.size(); i >= 0; i--) {
if (words.contains(s[i])) {
re.push(s[i]);
v[i] = true;
}
}
for (int i = 0; i < v.size(); ++i) {
if (v[i] == true) {
s[i] = re.front();
re.pop();
}
}
return s;
}
};
|