345. Reverse Vowels of a String(反转字符串中的元音字母)

题目描述

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

元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现不止一次。

问题分析

不要被题目迷惑了,题意是将元音字符提取出来,然后按照原因字符组成的新串将原串中的元音字符对换位置,我们可以采用双指针的方法一个指针从左向右、一个指针从右向左,遇见两个都是元音,且左指针在右指针的左边就进行对换。终止条件为左指针与右指针相遇。

代码

char* reverseVowels(char* s) {
    int length = 0;
    while(s[length++]!='\0');
    length--;
    int left = 0;
    int right = length-1;
    while(left<right){
        while(left<length){
            if(s[left]!='a'&&s[left]!='e'&&s[left]!='i'&&s[left]!='o'&&s[left]!='u'&&s[left]!='A'&&s[left]!='E'&&s[left]!='I'&&s[left]!='O'&&s[left]!='U'){
                left++;
            }else{
                break;
            }
        }
        while(right>=0){
            if(s[right]!='a'&&s[right]!='e'&&s[right]!='i'&&s[right]!='o'&&s[right]!='u'&&s[right]!='A'&&s[right]!='E'&&s[right]!='I'&&s[right]!='O'&&s[right]!='U'){
                right--;;
            }else{
                break;
            }
        }
        if(right>left){
	        char t = s[left];
	        s[left] = s[right];
	        s[right] = t;
            left++;
	        right--;
    	}
    }
    return s;
}

提交结果截图

345. Reverse Vowels of a String(反转字符串中的元音字母)_第1张图片

你可能感兴趣的:(leetcode刷题日记,算法,开发语言,刷题,数据结构)