[LeetCode] 345. Reverse Vowels of a String

Write a function that takes a string as input and reverse only the vowels of a string.

Example 1:

Input: “hello”
Output: “holle”
Example 2:

Input: “leetcode”
Output: “leotcede”
Note:
The vowels does not include the letter “y”.

分析,
Vowels:元音字母,根据WIKI上的解释,包括AOIEU,部分情况下包括y,但题目明确写明不包括Y。所以认为Vowels包括AOIEU以及aoieu。
如何判断一个字符是否是元音?跟这10个字符一个一个比较肯定是比较傻的方法。
C里面没有C++的map这种数据结构,为了在O(1)的时间内判断是否是元音,我们可以构建一个数组
char is_vowels[128] = {0};
is_Vowels[‘A’] = is_Vowels[‘a’] ….=1
这样判断一个字母c是否是元音,只要is_Vowels[c] ==1 即可,典型的空间换时间。
反转元音字母位置,只要首尾两个指针分别找到元音字母,然后交换即可。

void init_vowels(char *buf)
{
    buf['A'] = buf['a'] = 1;
    buf['E'] = buf['e'] = 1;
    buf['I'] = buf['i'] = 1;
    buf['O'] = buf['o'] = 1;
    buf['U'] = buf['u'] = 1;

}
char* reverseVowels(char* s) {
    char buf[128] = {0};
    int length = strlen(s);
    if(length <=1)
        return s;
    init_vowels(buf);
    char *pStart = s;
    char *pEnd = s+length -1;
    char c;
    while(pStart < pEnd){
        while(pStart<pEnd && buf[*pStart] !=1 )pStart++;
        while(pEnd>pStart && buf[*pEnd] !=1) pEnd--;
        c = *pStart;
        *pStart = *pEnd;
        *pEnd =c ;
        pStart++;
        pEnd--;
    }
    return s;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值