LeetCode——反转字符串中的元音字母(JavaScript)
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入: "hello" 输出: "holle"
示例 2:
输入: "leetcode" 输出: "leotcede"
说明:
元音字母不包含字母"y"。
思路:
典型的双指针——对撞指针解法。设置两个指针,一头一尾,相向运动。
i:头部指针,j:尾部指针。
判断一个字符是否是元音字母,采用正则表达式。正则表达式的详细用法请看:正则表达式用法大全。
JavaScript中正则表达式用法:
let reg = /[aeiouAEIOU]/
// 用/.../ 两个斜线包括起来,说明这是正则表达式
// 用中括号表示匹配中括号中任一字符
reg.test('a') // true
reg.test('c') // false
当i < j 时循环:
判断 i 上的元素是否是元音字母。若不是,则i ++。
判断 j 上的元素是否是元音字母。若不是,则 j--。
判断 i、j 上的元素是否相等,若不等,则交换 i、j上的元素。(注意:字符串是不可改变的,可以将字符串转换成数组,也可以采用slice将字符串切片来组装成新字符串。)
移动 i 和 j 。
/**
* @param {string} s
* @return {string}
*/
var reverseVowels = function(s) {
let i = 0,
j = s.length-1,
reg = /[aeiouAEIOU]/,
str = s
while (i < j) {
if (!reg.test(s[i])) {
i ++;
continue;
}
if (!reg.test(s[j])) {
j--;
continue;
}
if (s[i] !== s[j]) {
str = str.slice(0,i) + s[j] + str.slice(i+1,j) + s[i] + str.slice(j+1)
}
i++
j--
}
return str
};