刷题笔记-125. 验证回文串

140 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

一、题目描述:

125. 验证回文串 - 力扣(LeetCode) (leetcode-cn.com)

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= s.length <= 2 * 10^5
  • 字符串 s 由 ASCII 字符组成

二、思路分析:

  1. 先使用Number,根据空字符串转换为数值型后,是0,进行if分支语句判断。也就是给定的是空字符串的情况,单独考虑,直接输出false
  2. 其余情况:
    (1)将字符串若有大写字母则转换为小写
    (2)定义一个空数组,用于接受数字和字母,筛选掉其他类型
    (3)对字符串进行遍历,根据ASCII码,筛选出数字和字母,筛选掉其他类型
    (4)获取fh数组长度
    (5)if分支语句判断:基本思路判断首位对应相等,但是要分偶数与奇数

三、AC代码:

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
<!-- 先使用Number,根据空字符串转换为数值型后,是0,进行if分支语句判断。也就是给定的是空字符串的情况,单独考虑,直接输出false -->
if(Number(s)===0){return true}
<!-- 将字符串若有大写字母则转换为小写 -->
s=s.toLowerCase()
<!-- 定义一个空数组,用于接受数字和字母,筛选掉其他类型 -->
let fh=[]
<!-- 对字符串进行遍历,根据ASCII码,筛选出数字和字母,筛选掉其他类型-->
for(let i=0;i<s.length;i++){
    if((s[i].charCodeAt()>=97&&s[i].charCodeAt()<=122)||(s[i].charCodeAt()>=48&&s[i].charCodeAt()<=57)){
        fh.push(s[i])
    }
}
<!-- 获取fh数组长度 -->
let changdu=fh.length
<!-- if分支语句判断:基本思路判断首位对应相等,但是要分偶数与奇数 -->
<!-- 偶数情况 -->
if(changdu%2===0){
    for(let i=0;i<=changdu/2-1;i++){
        if(fh[i]!==fh[changdu-i-1]){return false}
    }
    return true
}
<!-- 奇数情况 -->
else{
    for(let i=0;i<=(changdu-1)/2-1;i++){
        if(fh[i]!==fh[changdu-i-1]){return false}
    }
    return true
}
};