题目描述
解题思路:双指针
先找到元音字母,头指针指向起始位置,尾指针指向尾部;在遍历的过程中,我们不停地将
i 向右移动,直到 i 指向一个元音字母(或者超出字符串的边界范围);同时,我们不停地将
j 向左移动,直到 j 指向一个元音字母。此时,如果 i<j,那么我们交换 i 和 j 指向的元音字母,否则说明所有的元音字母均已遍历过,就可以退出遍历的过程。
int vowel(char c)
{
if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ||
c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U')
return 1;
else
return 0;
}
char * reverseVowels(char * s){
int i = 0, j = strlen(s) - 1;
char t;
while(i < j){
while(i < j && !vowel(s[i]))
i++;
while(i < j && !vowel(s[j]))
j--;
t = s[i];
s[i] = s[j];
s[j] = t;
i++;
j--;
}
return s;
}