考点 双指针
解题思路
使用双指针循环,找到需要操作的字符,使用swap反转即可
string reverseVowels(string s){
if(s== "") return s;
int size = s.size();
#define vowels(a)((a == 'a')||( a=='o')|| (a=='e')|| (a=='i')|| (a=='u')||(a == 'A')||( a=='O')|| (a=='E')|| (a=='I')|| (a=='U'))
for(int l=0, r=size-1; l<=r;){
while(l<=r && vowels(s[l]) ==false) l++;
while(l<=r && vowels(s[r]) == false) r--; //找到l r
if(l>r) return s;
swap(s[l],s[r]); //交换 l r
l++,r--;
}
return s;
}
测试代码
string s = "hello";
cout << reverseVowels(s) << endl;
骚操作
- for循环中参数缺省的情况;
- #define的操作