【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 提交记录

猜你喜欢

转载自blog.csdn.net/sphinx1122/article/details/84639428