1. 程式人生 > >【JS】 驗證迴文串 #字串 #雙指標 Easy

【JS】 驗證迴文串 #字串 #雙指標 Easy

給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,可以忽略字母的大小寫。

說明:本題中,我們將空字串定義為有效的迴文串。

輸入: “A man, a plan, a canal: Panama” ,輸出: true
輸入: “race a car” , 輸出: false



解法一:

將字串轉成大寫,刪除字串中數字和字母之外的符號,一個新變數 turn 接收翻轉後的字串, 判斷 s , turn 是否相等。

複雜度O(n),可能是函式用太多了速度看起來慢


var isPalindrome = function(s) {

    s = s.toUpperCase().split("");
    for(let i=0;i<s.length;i++) {
        if( (s[i]<='Z' && s[i]>='A') || (s[i]>='0' && s[i] <='9') ){

        }else{
            s.splice(i,1);
            i--;
        }
    }
    s=s.join("")
    var turn=s.split("").reverse().join("")
    return s==turn ? true : false;
    
}

執行用時:2012 ms
已經戰勝 3.75 % 的 javascript 提交記錄


解法二:

建立map,並且使用雙指標

var isPalindrome = function(s) {

        var  arr={"a":1,"b":1,"c":1,"d":1,"e":1,"f":1,"g":1,"h":1,"i":1,"j":1,"k":1,"l":1,"m":1,
                    "n":1,"o":1,"p":1,"q":1,"r":1,"s":1,"t":1,"u":1,"v":1,"w":1,"x":1,"y":1,"z":1,
                    "1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"0":1};

    s = s.toLowerCase();
    var len=s.length-1
    for(let i=0,j=len;i<j;) {
        if( arr[s[i]]==1 && arr[s[j]]==1){
            if(s[i]!=s[j]) return false;
            i++;j--
        }else {
            if(arr[s[i]] !=1) i++
            if(arr[s[j]] !=1) j--
        }
        //console.log(s[i],s[j],i,j)
    }
    return true;
};

執行用時:88 ms
已經戰勝 91.28 % 的 javascript 提交記錄