3 JavaScript leetcodeを実現します.双指針法:文字列の母音文字を反転します.


目次
1テーマ
2例
3解答:双指針法
4コード
1テーマ
https://leetcode-cn.com/problems/reverse-vowels-of-a-string/
入力として文字列を作成し、文字列の母音文字を反転します.
2例
例1:
入力:「ハロー」
出力:「holle」
 
例2:
入力:「leetcode」
出力:「leotcede」
説明:
母音文字にはアルファベット「y」は含まれていません.
3解答:双指針法
JSでは、文字列は可変ではなく、文字列の文字の変化を容易にするために、文字列を配列に変換する必要があります.
最初のポインタleftとrightを設定し、leftは左から右へ文字列配列を巡回し、rightは右から左へ文字列配列を巡回し、両者が母音文字を指す場合、この2つの文字を交換します.具体的な解析:left<=right後に以下の操作を行います.
leftとrightが元の文字を指している場合、それらを交換しながら、leftを右に移動し、rightを左に移動します.
leftが指している文字が母音文字ではない場合、leftは右に移動します.
rightが指しているのが母音文字ではない場合、rightは左に移動します.
4コード
"use strict";
/**
 * @param {string} s
 * @return {string}
 */var reverseVowels = function(s) {
    var vowelsStr = "aeiouAEIOU";  //       
    s = s.split("");   //            ,             
    var left = 0;  //   ,   0  ,      
    var right = s.length - 1;  //   ,       s       ,      
    while(left <= right){
        if(vowelsStr.indexOf(s[left])!==-1 && vowelsStr.indexOf(s[right])!==-1){
            //  left right      ,     ,  left    ,right    ;
            var temp = s[left];
            s[left] = s[right];
            s[right] = temp;
            left++;
            right--;
        }else if(vowelsStr.indexOf(s[left])===-1){
            //  left           ,left    ;
            left++;
        }else{
            //  right         ,right    。
            right--;
        }
    }
    return s.join("");    //         
};
//      while                        
function reverseVowels(str) {
    let vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'];
    let strToArr = str.split('');
    let left = 0;   //   ,      
    let right = strToArr.length - 1; //   
    let temp;
    while(left < right){
        while (vowels.indexOf(strToArr[left]) === -1 && left < right){
            /*       left< right,           
                       ,       ,left< right,         ,     
                     ,     left>right,         ,            
            * */
            //  :            ,            ,         
            left++;
        }
        while (vowels.indexOf(strToArr[right]) === -1 && left < right){
            right--;
            //continue;
        }
        temp = strToArr[left];
        strToArr[left] = strToArr[right];
        strToArr[right] = temp;
        left++;
        right--;
    }
    return strToArr.join('');
}

let rel = reverseVowels('leetcode');
console.log(rel)