345. 反转字符串中的元音字母
1.题目描述
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
示例 2:
说明:
元音字母不包含字母"y"。
2.思路
使用双指针,一个指针从头向尾遍历,一个指针从尾到头遍历,当两个指针都遍历到元音字符时,交换这两个元音字符。
为了快速判断一个字符是不是元音字符,将全部元音字符添加到元音字符串str 中,从而以 O(1) 的时间复杂度进行该操作。
3.代码
class Solution {
public:
string reverseVowels(string s) {
int index1 = 0;
int index2 = s.size() - 1;
string str = "aeiouAEIOU";
while(index1 < index2){
while(str.find(s[index1]) == -1 && index1 < index2){
++index1;
}
while(str.find(s[index2]) == -1 && index1 < index2){
--index2;
}
//此时index1和index2都指向元音字母
if(index1 < index2){
swap(s[index1++],s[index2--]);
}
}
return s;
}
};
4.复杂度分析
时间复杂度:O(n)
空间复杂度:O(1)