前言
他来了他来了,这熟悉的题目,不就是那最熟悉的陌生人么,哈哈
今日题目
leecode125. 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
题目分析
什么是回文串?
如下图所示,颜色相同的两个字段较中心字母对称,字符串从左到右和从右到左是一样的
那么想验证回文串第一步就是将字符串里的除字母和数字之外的字符去掉
s.toLowerCase().match(/[A-Za-z0-9]+/g).join('')
"A man, a plan, a canal: Panama" => "amanaplanacanalpanama"
根据回文串的特点,前后字符对称,想到双指针,一个从左到右,一个从右往左,当他们交汇的时候代表循环结束
var isPalindrome = function(s) {
const strArr = s.toLowerCase().match(/[A-Za-z0-9]+/g)
if (!strArr) return true
const str = strArr.join('')
let start = 0
let end = str.length - 1
while(start < end) {
if (str[start] !== str[end]) {
return false
}
start++
end--
}
return true
};
总结
题目不难,运用双指针很容易解决。
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情