题干:
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现。
思路:
利用双指针,从头和尾两个方向来寻找第一个元音字母,两个元音字母都找到以后将两个元音字母交换位置,再移动数组位置,进行下一次的寻找。直到头和尾相等的时候结束循环,returns
源码:
方法一:
char vowel[] = "aeiouAEIOU";
//判断是否是元音字母
bool isVowel(char ch){
for(int i = 0;vowel[i];i++){
if(vowel[i] == ch){
return true;
}
}
return false;
};
char* reverseVowels(char * s){
int i = 0,j = strlen(s) - 1;
char temp = '0';
while(i < j){
while(i < j && !isVowel(s[i])){ //寻找从s[0]开始的第一个元音字母
++i;
}
while(i < j && !isVowel(s[j])){ //寻找从s[maxsize -1]往前开始数的第一个元音字母
--j;
}
//给两个元音字母交换位置,并使i往后移动一位,j往前移动一位,使寻找元音字母的循环继续进行进行
if(i < j){
temp = s[i];
s[i] = s[j];
s[j] = temp;
++i;
--j;
}
}
return s;
}
方法二:
char* reverseVowels(char * s){
int i = 0,j = strlen(s) - 1;
char *match = "aeiouAEIOU";
char temp = '0';
while(i < j){
while(i < j && strchr(match,s[i]) == NULL){ //寻找从s[0]开始的第一个元音字母
++i;
}
while(i < j && strchr(match,s[j]) == NULL){ //寻找从s[maxsize -1]往前开始数的第一个元音字母
--j;
}
//给两个元音字母交换位置,并使i往后移动一位,j往前移动一位,使寻找元音字母的循环继续进行进行
if(i < j){
temp = s[i];
s[i] = s[j];
s[j] = temp;
++i;
--j;
}
}
return s;
}
补充:
关于strchr函数------https://www.runoob.com/cprogramming/c-function-strchr.html
链接:https://leetcode-cn.com/problems/reverse-vowels-of-a-string/