学习日记--leecode 345

题干:

给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。

元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现。

思路:

利用双指针,从头和尾两个方向来寻找第一个元音字母,两个元音字母都找到以后将两个元音字母交换位置,再移动数组位置,进行下一次的寻找。直到头和尾相等的时候结束循环,returns

源码:

方法一:

char vowel[] = "aeiouAEIOU";


 

//判断是否是元音字母

bool isVowel(char ch){

    for(int i = 0;vowel[i];i++){

        if(vowel[i] == ch){

            return true;

        }

    }

    return false;

};


 

char* reverseVowels(char * s){

    int i = 0,j = strlen(s) - 1;

    char temp = '0';

    while(i < j){

        while(i < j && !isVowel(s[i])){      //寻找从s[0]开始的第一个元音字母

            ++i;

        }

        while(i < j && !isVowel(s[j])){      //寻找从s[maxsize -1]往前开始数的第一个元音字母

            --j;

        }

        //给两个元音字母交换位置,并使i往后移动一位,j往前移动一位,使寻找元音字母的循环继续进行进行

        if(i < j){

        temp = s[i];

        s[i] = s[j];

        s[j] = temp;

        ++i;

        --j;

        }

    }

    return s;

}

方法二:

char* reverseVowels(char * s){

    int i = 0,j = strlen(s) - 1;

    char *match = "aeiouAEIOU";

    char temp = '0';

    while(i < j){

        while(i < j && strchr(match,s[i]) == NULL){      //寻找从s[0]开始的第一个元音字母

            ++i;

        }

        while(i < j && strchr(match,s[j]) == NULL){      //寻找从s[maxsize -1]往前开始数的第一个元音字母

            --j;

        }

        //给两个元音字母交换位置,并使i往后移动一位,j往前移动一位,使寻找元音字母的循环继续进行进行

        if(i < j){

        temp = s[i];

        s[i] = s[j];

        s[j] = temp;

        ++i;

        --j;

        }

    }

    return s;

}

补充:

关于strchr函数------https://www.runoob.com/cprogramming/c-function-strchr.html

链接:https://leetcode-cn.com/problems/reverse-vowels-of-a-string/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值