345. 反转字符串中的元音字母

69 阅读1分钟

345. 反转字符串中的元音字母

简单

相关标签

premium lock icon相关企业

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

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

 

示例 1:

输入: s = "IceCreAm"

输出: "AceCreIm"

解释:

s 中的元音是 ['I', 'e', 'e', 'A']。反转这些元音,s 变为 "AceCreIm".

示例 2:

输入: s = "leetcode"

输出: "leotcede"

 

提示:

  • 1 <= s.length <= 3 * 105
  • s 由 可打印的 ASCII 字符组成

题解:双指针直接遍历,处理好循环变量的更新时机即可。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char str[300000] = {'\0'};
    scanf("%s", str);
    int size, i, j;
    char temp;
    size = strlen(str);
    i = 0;
    j = size - 1;
    while (i < j)
    {
        while (str[i] != 'a' && str[i] != 'e' && str[i] != 'i' && str[i] != 'o' && str[i] != 'u' && str[i] != 'A' && str[i] != 'E' && str[i] != 'I' && str[i] != 'O' && str[i] != 'U')
        {
            i ++;
        }
        while (str[j] != 'a' && str[j] != 'e' && str[j] != 'i' && str[j] != 'o' && str[j] != 'u' && str[j] != 'A' && str[j] != 'E' && str[j] != 'I' && str[j] != 'O' && str[j] != 'U')
        {
            j --;
        }
        if (i < j)
        {
            temp = str[i];
            str[i] = str[j];
            str[j] = temp;
        }
        i ++;
        j --;
    }
    printf("%s", str);

    return 0;
}