仅记录自己刷题过程,顺便督促自我学习~
简单
题目描述
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现。
示例 1:
输入: s = "hello"
输出: "holle"
示例 2:
输入: s = "leetcode"
输出: "leotcede"
提示:
- 1 <= s.length <= 3 *
s由 可打印的 ASCII 字符组成
我的实现
var reverseVowels = function (s) {
let srr=s.split('')
let arr = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"];
for (let i = 0, j = srr.length - 1; i < j; ) {
if (!arr.includes(srr[i])) {
i++;
}
if (!arr.includes(srr[j])) {
j--;
}
if (arr.includes(srr[i]) && arr.includes(srr[j])) {
[srr[i], srr[j]] = [srr[j], srr[i]];
i++;j--
}
}
return srr.join('');
};
官方实现
思路都是双指针,记录下Array.form的用法
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;
}