LeetCode——反轉字串中的母音字母(JavaScript)
阿新 • • 發佈:2018-11-14
編寫一個函式,以字串作為輸入,反轉該字串中的母音字母。
示例 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 };