0%

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

题目

345. 反转字符串中的元音字母
难度:简单
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

示例 1:

输入:”hello”
输出:”holle”
示例 2:

输入:”leetcode”
输出:”leotcede”

提示:

元音字母不包含字母 “y” 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-vowels-of-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法一:双指针

这提不难。
弄两个指针iji从前往后走,j从后往前走,当遇到原因字母的时候,就停下来。当两个指针都停下来的时候,交换两个字母。使用while循环,退出条件是ij重合。

代码

  • python
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    def reverseVowels(s):
    l = list(s)
    i, j = 0, len(s)-1
    Vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']
    # vowels = "aeiouAEIOU"
    i_step = 1
    j_step = -1
    while i < j:
    if l[i] in Vowels:
    i_step = 0
    if l[j] in Vowels:
    j_step = 0

    if i_step == j_step == 0:
    l[i], l[j] = l[j], l[i]
    i_step = 1
    j_step = -1
    i += i_step
    j += j_step
    return ''.join(l)
    和官方题解几乎一样。
  • C
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
       	int isVowel(char ch)
    {
    char vowels[] = "aeiouAEIOU";
    for (int i = 0; vowels[i]; i++)
    {
    if (ch == vowels[i])return 1;
    }
    return 0;
    }

    char* reverseVowels(char* s)
    {
    int i = 0, j = strlen(s)-1;
    char tmp = s[0];
    int i_step = 1, j_step = -1;
    while (i < j)
    {
    if (1 == isVowel(s[i]))
    i_step = 0;
    if (1 == isVowel(s[j]))
    j_step = 0;
    if (i_step == 0 && j_step == 0)
    {
    printf("%c %c %s\n", s[i], s[j], s);
    tmp = s[i];
    s[i] = s[j];
    s[j] = tmp;
    i_step = 1;
    j_step = -1;
    }
    i += i_step;
    j += j_step;

    }
    return s;
    }

提交记录

python提交记录
C语言提交记录