?反转字符中的元音字母
https://leetcode-cn.com/problems/reverse-vowels-of-a-string/
?
?
分析:
1.先找出字符串中所有的元音字母,注意这里题目区分了大小写
? ?<1.>先用一个数组储存所有的元音字母包括大小写
? ?<2.>定义一个函数(bool judge( ) )来判定是否属于元音字母
char mi[]="aeiouAEIOU";
bool judge(char a)
{
for(int i=0;i<strlen(mi);i++)
{
if(mi[i]==a)
return true;
}return false;
}
2.进行反转
用一个函数来实现交换
void swap(char *p,char *q)
{
char t=*p;*p=*q;*q=t; //t为中间变量
}
3.采用了双指针(重点)
? <1.>?使用两个指针 i?和 j?对字符串相向地进行遍历。
具体地,指针 i?初始时指向字符串 s 的首位,指针 j?初始时指向字符串 s 的末位。
? ?<2.>在遍历的过程? ? 中,我们不停地将 i?向右移动,直到 i?指向一个元音字母(或者超出字符串的边界范围);同 时 我们不停地将 j?向左移动,直到 j指向一个元音字母。
? ?<3.>此时,如果 i<j,那么我们交换 i 和 j?指向的元音字母,否则说明所有的元音字母均已遍历过,就可以退出遍历的过程。
char * reverseVowels(char * s){
int i=0;int j=strlen(s)-1; //双指针i,j
for(i=0;i<strlen(s);i++) //遍历字符串
{
while(i<j) //结束临界的条件
{
if(!ci(s[i])) // !ci(s[i]) 表示ci(s[i])==0时
{
i++;
}
if(!ci(s[j]))
{
j--;
}
if(ci(s[i])&&ci(s[j])) //找到双指针所指引的值都时元音字符时
{
swap(&s[i],&s[j]); //交换
i++;j--;
}
}
}return s;
}
所有代码如下
char mi[]="aeiouAEIOU";
void swap(char *p,char *q)
{
char t=*p;*p=*q;*q=t;
}
bool judge(char a)
{
for(int i=0;i<strlen(mi);i++)
{
if(mi[i]==a)
return true;
}return false;
}
char * reverseVowels(char * s){
int i=0;int j=strlen(s)-1;
for(i=0;i<strlen(s);i++)
{
while(i<j)
{
if(!ci(s[i]))
{
i++;
}
if(!ci(s[j]))
{
j--;
}
if(ci(s[i])&&ci(s[j]))
{
swap(&s[i],&s[j]);
i++;j--;
}
}
}return s;
}
|