1. 程式人生 > >LeetCode——反轉字串中的母音字母(JavaScript)

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