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
};

猜你喜欢

转载自blog.csdn.net/romeo12334/article/details/82712264
今日推荐