Skip to content

Latest commit

 

History

History
74 lines (65 loc) · 1.62 KB

125.验证回文串.md

File metadata and controls

74 lines (65 loc) · 1.62 KB

描述

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

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

示例 1:

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

示例 2:

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

解一 [正则和双指针]

思路

  1. 首先利用正则表达式将s中的非数字,字母替换为空后全部转成小写或大写
  2. 使用双指针判断首尾字符是否相同

代码

var isPalindrome = function(s) {
    s = s.replace(/[^a-zA-Z0-9]/g,'').toLowerCase();
    let left = 0, right = s.length-1;
    while(left < right) {
        if(s[left] !== s[right]){
            return false;
        }
        left++;
        right--;
    }
    return true;
};

解二[双指针] 思路

与上一解法类似

我们可以不用正则来过滤掉非数字,字母的字符

在遍历时判断

代码

var isPalindrome = function(s) {
    s = s.toLowerCase();
    let left = 0, right = s.length-1;
    while(left < right) {
        if(!isLetterOrNum(s[left])){
            left++;
            continue;
        }
        if(!isLetterOrNum(s[right])){
            right--;
            continue;
        }
        if(s[left] !== s[right]){
            return false;
        }
        left++;
        right--;
    }
    return true;
};
function isLetterOrNum(s){
    let code = s.charCodeAt();
    return (code >= 97 && code <= 122) || (code >= 48 && code <= 57); 
}