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
,右指针right
,left
指向字符串第一个元素
,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
};