title | description | keywords | |||||||
---|---|---|---|---|---|---|---|---|---|
345. 反转字符串中的元音字母 |
LeetCode 345. 反转字符串中的元音字母题解,Reverse Vowels of a String,包含解题思路、复杂度分析以及完整的 JavaScript 代码实现。 |
|
🟢 Easy 🔖 双指针
字符串
🔗 力扣
LeetCode
Given a string s
, reverse only all the vowels in the string and return it.
The vowels are 'a'
, 'e'
, 'i'
, 'o'
, and 'u'
, and they can appear in
both lower and upper cases, more than once.
Example 1:
Input: s = "hello"
Output: "holle"
Example 2:
Input: s = "leetcode"
Output: "leotcede"
Constraints:
1 <= s.length <= 3 * 105
s
consist of printable ASCII characters.
给你一个字符串 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 * 10^5
s
由 可打印的 ASCII 字符组成
这一题的解题思路是使用双指针对撞,来不断交换首尾元素,和 第 344 题 思路一样。
-
双指针初始化:左指针
left
指向字符串的起始位置,右指针right
指向字符串的末尾位置。 -
双指针移动:
- 当
left
指针指向的字符不是元音时,将left
向右移动。 - 当
right
指针指向的字符不是元音时,将right
向左移动。 - 如果两指针都指向元音,则交换两者的字符,并分别移动两指针。
- 当
-
终止条件:当
left >= right
时,完成反转。 -
辅助函数:使用
isVowel
函数判断字符是否为元音,支持大小写字母。 -
构造结果:将字符串转换为数组进行原地修改,最后拼接成字符串返回结果。
- 时间复杂度:
O(n)
,其中n
是字符串的长度,要遍历字符串中的每个字符。 - 空间复杂度:
O(n)
,使用了一个数组存储字符。
/**
* @param {string} s
* @return {string}
*/
var reverseVowels = function (s) {
s = s.split(''); // 将字符串转为数组,方便交换字符
let left = 0; // 左指针
let right = s.length - 1; // 右指针
while (left < right) {
if (!isVowel(s[left])) {
// 左指针不指向元音
left++; // 向右移动
} else if (!isVowel(s[right])) {
// 右指针不指向元音
right--; // 向左移动
} else {
// 两指针都指向元音
let temp = s[left];
s[left] = s[right];
s[right] = temp;
left++; // 左指针右移
right--; // 右指针左移
}
}
return s.join(''); // 拼接数组返回字符串
};
// 判断字符是否是元音
var isVowel = function (i) {
i = i.toLowerCase(); // 转为小写
return i == 'a' || i == 'e' || i == 'i' || i == 'o' || i == 'u';
};
题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
---|---|---|---|---|---|
344 | 反转字符串 | [✓] | 双指针 字符串 |
🟢 | 🀄️ 🔗 |
1119 | 删去字符串中的元音 🔒 | 字符串 |
🟢 | 🀄️ 🔗 | |
2785 | 将字符串中的元音字母排序 | 字符串 排序 |
🟠 | 🀄️ 🔗 | |
2810 | 故障键盘 | 字符串 模拟 |
🟢 | 🀄️ 🔗 |