【刷题打卡】125. 验证回文串

101 阅读1分钟

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)