给你一个字符串s,仅反转字符串中的所以元音字母,并返回结果字符串。元音字母包括'a','e','i','o','u',且可能大小写两种形式出现。
示例一:
输入:s="hello"
输出:"holle"
事例二:
输入:"leetcode"
输出:"leotcede"
方法:双指针
我们可以使用两个指针i和j对字符串想向的进行遍历。具体地,指针i初始时指向字符串s的首位,指针j初始指向字符串s的末位。在遍历的过程中,我们不停地将i向右移动,直到i指向一个元音字母(或者超出字符串边界范围);同时,我们不停地将j向左运动,直到j指向一个元音字母。此时,如果i<j,那么我们交换i和j指向的元音字母,否则说明所有元音字母以遍历过 就可以退出遍历的过程。
char vowel[]="aeiouAEIOU";
bool isvowel (char ch)
{
int i;
for (i=0;i<vowel[i];i++)
{
if (vowel[i]==ch)
{
return true;
}
}
return false;
}
char * reverseVowels(char * s){
int i=0;
int j=strlen (s)-1;
while (i<j)
{
while (i<strlen(s) && !isvowel(s[i]))
{
i++;
}
while (j>0&&!isvowel(s[j]))
{
j--;
}
if (i<j)
{
char* tmp=s[i];
s[i]=s[j];
s[j]=tmp;
i++;
j--;
}
}
return s;
}
时间复杂度:O(n)
空间复杂度:O(1)