#include <iostream>
#include <string>
#include <algorithm> /* 为了使用std::swap函数 */
using namespace std; /* string类型是std命名空间中的 */
class Solution { // 类方法
public: // 公有部分
string yuan = "aeiouAEIOU"; // 定义元音字母字符串变量
bool isYuan(char c) // 判断是否为元音函数
{
for(auto a:yuan) // 遍历字符串中的所有元素
if(c==a)
return true;
return false;
}
string reverseVowels(string s) { // 定义接收原字符串s的反转函数
int n = s.length(); // 获取字符串s的长度
if(n == 0) // 如果字符串为空,直接返回
return s;
int left = 0; // 初始化左指针指向第一个字符
int right = n - 1; // 初始化右指针指向最后的字符
while(left < right) /* 循环直到左右指针相遇 */
{
if(!isYuan(s[left])) // 如果左指针指向的字符不是元音
{
left++; // 左指针向右移动
continue; // 继续下一次循环
};
if(!isYuan(s[right])) // 如果右指针指向的字符不是元音
{
right--; // 右指针向左移动
continue; // 继续下一次循环
};
if(s[left] != s[right]) /* 如果左右指针指向的字符不相同 */
swap(s[left++], s[right--]); // 交换左右指针指向的字符,并同时移动指针
else // 如果左右指针指向的字符相同
{
left++; // 左指针向右移动
right--; // 右指针向左移动
}
}
return s; // 返回反转元音字母后的字符串
}
};
int main() {
Solution solution;
string input;
cout << "Enter a string: ";
cin >> input;
string output = solution.reverseVowels(input);
cout << output << endl;
return 0;
}
双指针算法详解(快慢指针、对撞指针、滑动窗口)
原文链接在上