一、题目描述
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入: "hello"
输出: "holle"
示例 2:
输入: "leetcode"
输出: "leotcede"
说明:
元音字母不包含字母"y"。
二、解题思路
双指针的思路,first指向起始位置,last指向最后一个位置,然后分别判断first、last指向的元素是否是元音字母,如果是,则将它们对应的元素交换。
三、代码实现
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cctype>
using namespace std;
class Solution {
public:
string reverseVowels(string s) {
vector<char> vec {'a', 'e', 'i', 'o', 'u'};
if (s.size() > 0) {
auto first = s.begin();
auto last = s.end() - 1;
while (first < last) {
while (first < last && find(vec.begin(), vec.end(), tolower(*first)) == vec.end()) {
first++;
}
while (first < last && find(vec.begin(), vec.end(), tolower(*last)) == vec.end()) {
last--;
}
swap(*first, *last);
first++;
last--;
}
}
string str = "";
for (auto& x : s) {
str += x;
}
return str;
}
};
四、总结
题目比较简单,但是在编写代码的过程中遇到一个问题:没有在内部while循环里添加判断条件first < last导致first和last在相遇后继续迭代,最终导致原本交换了的元素,又重新交换回去,可通过debug模式测试。