这一题属于简单难度的题目,方法的话使用双指针。一个指针从0开始扫描一个指针从末尾开始扫描
当前指针大于后指针结束循环。
有几个点需要注意:第一要注意元音的大小写,题目里没有写清楚,但是测试用例需要考虑
第二:字符串穿的长度要足够大,题目里也没有讲清楚,但是有超长字符串,内存空间分配的不够会导致内存不够的错误
代码如下: 总体效率还可以,但是存储空间消耗的有些多
#define Max_Len 1000001
bool isVovwel(char c)
{
if ((tolower©==‘a’)|| (tolower© == ‘e’)||(tolower© ==‘i’)|| (tolower© == ‘o’)|| (tolower© == ‘u’)) {
return true;
}
else {
return false;
}
}
char * reverseVowels(char * s) {
char* ret = (char*)calloc(sizeof(char)*Max_Len,sizeof(char));
if (s == NULL) {
return NULL;
}
int len = strlen(s);
if (len == 1) {
return s;
}
int i = 0;
int j = len-1;
while (i<=j)
{
if (!isVovwel(s[i])) {
ret[i] = s[i];
i++;
}
if(isVovwel(s[i]))
{
while (!isVovwel(s[j]))
{
ret[j] =s[j];
j--;
}
char temp = s[i];
ret[i] = s[j];
ret[j] = s[i];
i++;
j--;
}
}
return ret;
}