题目
345. 反转字符串中的元音字母
难度:简单
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入:”hello”
输出:”holle”
示例 2:
输入:”leetcode”
输出:”leotcede”
提示:
元音字母不包含字母 “y” 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-vowels-of-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法一:双指针
这提不难。
弄两个指针i
和j
,i
从前往后走,j
从后往前走,当遇到原因字母的时候,就停下来。当两个指针都停下来的时候,交换两个字母。使用while
循环,退出条件是i
和j
重合。
代码
- python
和官方题解几乎一样。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20def 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
36int 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;
}