一、题目描述
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现不止一次。
示例 1:
输入: s = "hello"
输出: "holle"
示例 2:
输入: s = "leetcode"
输出: "leotcede"
提示:
1 <= s.length <= 3 * 105s由 可打印的 ASCII 字符组成
二、思路分析
- 利用双指针,分别指向头和尾,先判断“头”是否是元音,如果不是,则i++;
- 如果“头”是元音,则判断“尾”是否是元音,如果不是,则j--;
- 如果“尾”也是元音,则交换它们的位置即可,随后i++、j--;
三、代码答案
var reverseVowels = function (s) {
const vowel = ['a', 'e', 'i', 'o', 'u']
s = s.split('')
let i = 0, j = s.length - 1;
while (j > i) {
if (vowel.includes(s[i].toLocaleLowerCase())) {
let temp = s[i]
if (vowel.includes(s[j].toLocaleLowerCase())) {
s[i] = s[j]
s[j] = temp
i++
j--
} else {
j--
}
} else {
i++
}
}
return s.join('')
};
- 优化版本
var reverseVowels = function (s) {
s = s.split('')
let i = 0, j = s.length - 1;
while (j > i) {
if (isVowel(s[i])) {
let temp = s[i]
if (isVowel(s[j])) {
s[i] = s[j]
s[j] = temp
i++
j--
} else {
j--
}
} else {
i++
}
}
return s.join('')
};
function isVowel(input) {
return "aeiouAEIOU".indexOf(input) !== -1
}