Skip to main content

125. 验证回文串

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

示例 1

输入: "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串

示例 2

输入: "race a car"
输出: false
解释:"raceacar" 不是回文串

代码

回文无非就两种情况:

  • 一种是 aba 型
  • 一种是 abba 型。 遍历字符串,第 n 个字符跟前后字符相比较,如果是 aba 型,就判断 n-1 位是否等于 n+1 位,如果相等,再判断 n-2 位是否等于 n+2 位,以此类推。如果是 abba 型,就判断 n 位是否等于 n+1 位,n-1 位是否等于 n+2 位...。

思路:对撞指针

  1. replace 替换非字母数字为空(提取字母)并转小写 const newStr = str.replace(/[^\w]/g,'').toLocaleLowerCase()
  2. for 从 0 递增
    • 声明对撞指针
      • left = newStr[i]
      • right = newStr[newStr.length - i - 1]
      • left 对比 right
        • 不相等立即返回 false
  3. 比对完成返回 true
var isPalindrome = function(str) {
// 1. 提取字母并转为小写
const newStr = str.replace(/[^\w]/g, '').toLocaleLowerCase();
// 2. 对撞指针
for(let i = 0; i < newStr.length / 2; i++ ){
const left = newStr[i]
const right = newStr[newStr.length - i - 1]
if(left !== right) {
return false
}
}
return true;
};

var str = "A man, a plan, a canal: Panama"
console.log(isPalindrome(str))