5、反转字符串中的元音字母

原题力扣《反转字符串中的元音字母》
难度简单

题目

给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 ‘a’、’e’、’i’、’o’、’u’,且可能以大小写两种形式出现不止一次。

示例 1:

1
2
输入:s = "hello"
输出:"holle"

示例 2:

1
2
输入:s = "leetcode"
输出:"leotcede"

提示:

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

解题

个人

关键:双指针

  1. 元音字母为 ‘a’、’e’、’i’、’o’、’u’
  2. 反转元音字母,指的是在字符串内,从左往右的第一个元音与从右往左的第一个元音进行互换
  3. 所以需要两个指针,分别左右开始循环,某一个遇到了元音,则等另一个遇到元音,都遇到后就互换,然后分别继续循环
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
var isYuanYin = function (s) {
const yuanyin = ["a", "e", "i", "o", "u"];
return yuanyin.includes(s.toLowerCase());
};
var reverseVowels = function (s) {
let left = 0;
let right = s.length - 1;

s = s.split(""); // 转为数组,方便位置调换

// 当左侧小于右侧时,说明还未循环完
// 当左侧大于右侧时,说明已经循环完
while (left < right) {
// 左侧的是否为元音
const leftYY = isYuanYin(s[left]);

// 右侧的是否为元音
const rightYY = isYuanYin(s[right]);

if (leftYY && rightYY) {
// 当左右都是元音时,进行互换
const temp = s[left];
s[left] = s[right];
s[right] = temp;

// 互换完成后,进行位移
left++;
right--;
} else {
// 左侧不为元音时,向右位移一位
if (!leftYY) left++;

// 右侧不为元音时,向左位移一位
if (!rightYY) right--;
}
}

return s.join("");
};

执行用时,消耗内存
76 ms,56.68 MB

耗时:20 min

官方

关键:双指针
思路:跟我的一样,不赘述

总结

第一次是知道了解决算法的名称,在知道了“双指针”后,细节也就慢慢写出来了


5、反转字符串中的元音字母
https://mrhzq.github.io/职业上一二事/算法学习/每日算法/5、反转字符串中的元音字母/
作者
黄智强
发布于
2024年1月13日
许可协议