Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
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 字符组成
二、思路分析:
判断回文串可以用双指针的方法,l指向头部r指向尾部
两头的指针向中间靠拢,以相遇为结束条件,若指向的字符不一样则不是回文串
由于本题只考虑字母和数字,且忽略大小写,所以在比较指针指向的两个字符需要排除掉其他字符的干扰
三、AC 代码:
var isPalindrome = function (s) {
let flag = true;
let l = 0, r = s.length - 1;
while (l < r) {
while (/[^A-Za-z0-9]/.test(s[l])) {
l++;
}
while (/[^A-Za-z0-9]/.test(s[r])) {
r--;
}
if (l < r && s[l].toLowerCase() !== s[r].toLowerCase()) {
flag = false;
break;
}
l++;
r--;
}
return flag;
};
四、总结:
简单的双指针。
范文参考:
验证回文串 - 验证回文串 - 力扣(LeetCode) (leetcode-cn.com)
字符串算法——回文串验证的三大解题办法:双指针 & 新数组 & reverse函数 - 验证回文串 - 力扣(LeetCode) (leetcode-cn.com)