【leetcode初级算法JS实现】16.验证回文字符串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false

解法:

// 解法1:
// 太羡慕那种经验老道,一写写出来的算法就很高效的,我第一个想出来的运行速度太慢了...
/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
    
    
    if(s.length === 0 ||s.length === 1) return true;
    s = s.replace(/\s*/g,"").toLowerCase();
    let str = '';
    for(let i = 0; i< s.length; i++ ){
    
    
       if( (/^[A-Za-z0-9]*$/).test(s[i])) str = str.concat(s[i]);
    }
    let left = 0;
    let right = str.length-1;
    while(left < right){
    
    
        if(str[left] !== str[right]) return false;
        left++;
        right--;
    }
    return true;
};
// 解法2:
// 运行速度快了一丢丢,然而还是没有跟上大众的步伐...
/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
    
    
    if(s.length === 0 ||s.length === 1) return true;
    s = s.replace(/\s*/g,"").toLowerCase();
    let left = 0;
    let right = s.length-1;
    while(left < right){
    
    
        if(! (/^[A-Za-z0-9]*$/).test(s[left])){
    
    
           left++; 
        }else if(! (/^[A-Za-z0-9]*$/).test(s[right])){
    
    
            right--;
        }else{
    
    
            if(s[left] !== s[right]) return false;
            left++;
            right--;
        }
    }
    return true;
};
// 解法3:
// 又简洁了一下,又快了一丢丢
/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
    
    
    if(s.length === 0 ||s.length === 1) return true;
    s = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase();
    let left = 0;
    let right = s.length-1;
    while(left < right){
    
    
         if(s[left] !== s[right]) return false;
        left++;
        right--;
    }
    return true;
};
// 解法4:
// 果然调用api是最慢的...
/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
    
    
    if(s.length === 0 ||s.length === 1) return true;
    let arr = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase().split('');
    return arr.join('') === arr.reverse().join('');
};

猜你喜欢

转载自blog.csdn.net/qq_34086980/article/details/106488651