Skip to content
On this page

LCR-018-验证回文串

标签:双指针 字符串

题目信息

题目地址LCR-018-验证回文串

题目内容:

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

本题中,将空字符串定义为有效的回文串。

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

示例 2:
    输入: s = "race a car"
    输出: false
    解释:"raceacar" 不是回文串

提示:
    1 <= s.length <= 2 * 105
    字符串 s 由 ASCII 字符组成

注意:本题与主站125题相同: https://leetcode-cn.com/problems/valid-palindrome/

题解

解法一

思路:

可以使用双指针来实现,

先使用正则将字符串中的非字母和数字字符过滤掉,然后指定左指针left,右指针rightleft指向字符串第一个元素right指向字符串最后一个元素,然后比较left位置的值和right位置的值是否相等,

如果相等,left向右移动一位right向左移动一位,如果不相等直接返回false

直到left大于等于right为止

代码实现:

javascript
/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
    let newStr = s.replace(/[^0-9a-zA-Z]+/g, '')
    let left = 0,
        right = newStr.length - 1
    while(left < right) {
        if(newStr[left].toLowerCase() !== newStr[right].toLowerCase()) return false
        left++
        right--
    }
    return true
};