Description
Write a function that takes a string as input and reverse only the vowels of a string.
Example 1:
Given s = "hello", return "holle".
Example 2:
Given s = "leetcode", return "leotcede".
Note:
The vowels does not include the letter "y".
題目分析
本題要求將所給字符串中的元音字母逆序排列,輔音字母不變际跪,然后輸出變換后的字符串查乒。元音字母共5個('a','e','i','o','u')硼讽,其余均為輔音字母。
注意:本題所給字符串中包含大小寫母罚屋,標(biāo)點符號等徙硅。
解題思路
題目要求將字符串中的元音字母逆序排列牙肝,第一步男应,復(fù)制所給字符串闹司,找到字符串中的元音字母并標(biāo)記位置,然后將其按照在字符串中出現(xiàn)的順序存儲下來沐飘。第二步游桩,按逆序?qū)⒋鎯Φ脑糇帜敢来翁钊胄伦址畼?biāo)記的位置。第三步耐朴,返回新的字符串借卧。
C語言代碼
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
char* reverseVowels(char* strs) {
int len=strlen(strs),i=0,j=0;
char string1[len+1]; //非元音字符集
char string2[len+1]; //元音字符集
char *temp;
temp=(char *)malloc(len+1);
for (i=0;i<len;i++)
{
if(strs[i]=='a'||strs[i]=='e'||strs[i]=='i'||strs[i]=='o'||strs[i]=='u'
||strs[i]=='A'||strs[i]=='E'||strs[i]=='I'||strs[i]=='O'||strs[i]=='U') //查找元音字母
{
string2[j]=strs[i];
string1[i]=1; //標(biāo)記元音字母位置
j++;
}
else
string1[i]=strs[i];
}
string2[j]='\0';
string1[i]='\0';
i=0;
while(string1[i]!='\0')
{
if(string1[i]==1) //ascii為1的字符是通信控制字符,不會出現(xiàn)在字符串中隔箍,因而將其填入
{
string1[i]=string2[j-1]; //逆序填入
j--;
}
i++;
}
strcpy(temp,string1);
return temp;
}
int main()
{
char *strs="0:u`bVbu`:0";
char *string;
string=reverseVowels(strs);
printf("%s",string);
return 0;
}
參考文獻
[1] https://leetcode.com/problems/reverse-vowels-of-a-string/#/description