题目描述
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现不止一次。
问题分析
不要被题目迷惑了,题意是将元音字符提取出来,然后按照原因字符组成的新串将原串中的元音字符对换位置,我们可以采用双指针的方法一个指针从左向右、一个指针从右向左,遇见两个都是元音,且左指针在右指针的左边就进行对换。终止条件为左指针与右指针相遇。
代码
char* reverseVowels(char* s) {
int length = 0;
while(s[length++]!='\0');
length--;
int left = 0;
int right = length-1;
while(left<right){
while(left<length){
if(s[left]!='a'&&s[left]!='e'&&s[left]!='i'&&s[left]!='o'&&s[left]!='u'&&s[left]!='A'&&s[left]!='E'&&s[left]!='I'&&s[left]!='O'&&s[left]!='U'){
left++;
}else{
break;
}
}
while(right>=0){
if(s[right]!='a'&&s[right]!='e'&&s[right]!='i'&&s[right]!='o'&&s[right]!='u'&&s[right]!='A'&&s[right]!='E'&&s[right]!='I'&&s[right]!='O'&&s[right]!='U'){
right--;;
}else{
break;
}
}
if(right>left){
char t = s[left];
s[left] = s[right];
s[right] = t;
left++;
right--;
}
}
return s;
}