# 反转字符串中的元音字母-简单
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现不止一次。
示例 1:
输入:s = "hello"
输出:"holle"
示例 2:
输入:s = "leetcode"
输出:"leotcede"
提示:
1 <= s.length <= 3 * 105
s 由 可打印的 ASCII 字符组成
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 方法 1: 双指针
/**
* @param {string} s
* @return {string}
*/
var reverseVowels = function(s) {
const res = [];
const n = s.length;
if (n <= 1) {
return s;
}
let left = 0;
let right = n - 1;
const map = {
a: 1,
e: 1,
i: 1,
o: 1,
u: 1,
A: 1,
E: 1,
I: 1,
O: 1,
U: 1,
};
while (left <= right) {
while (left < n && !map[s[left]]) {
res[left] = s[left];
left++;
}
while (right > 0 && !map[s[right]]) {
res[right] = s[right];
right--;
}
if (left <= right) {
// 交换位置
let temp = s[left];
res[left] = s[right];
res[right] = temp;
left++;
right--;
}
}
return res.join("");
};
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
37
38
39
40
41
42
43
44
45
46
47
48
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
37
38
39
40
41
42
43
44
45
46
47
48
# 方法 2: 双指针
var reverseVowels = function(s) {
const n = s.length;
const arr = Array.from(s);
let i = 0,
j = n - 1;
while (i < j) {
while (i < n && !isVowel(arr[i])) {
++i;
}
while (j > 0 && !isVowel(s[j])) {
--j;
}
if (i < j) {
swap(arr, i, j);
++i;
--j;
}
}
return arr.join("");
};
const isVowel = (ch) => {
return "aeiouAEIOU".indexOf(ch) >= 0;
};
const swap = (arr, i, j) => {
const temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
};
// 链接:https://leetcode.cn/problems/reverse-vowels-of-a-string/solutions/944385/fan-zhuan-zi-fu-chuan-zhong-de-yuan-yin-2bmos/
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
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