持续创作,加速成长!这是我参与「掘金日新计划 · 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 字符组成
二、思路分析:
- 先使用Number,根据空字符串转换为数值型后,是0,进行if分支语句判断。也就是给定的是空字符串的情况,单独考虑,直接输出false
- 其余情况:
(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
}
};