验证回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
示例 1:
输入: s = "A man, a plan, a canal: Panama" 输出:true 解释:"amanaplanacanalpanama" 是回文串。
思路:
利用双指针去解决, 创建两个左右指针, 通过左右指针同时向中间移动判断 对应元素是否相等
var isPalindrome = function(s) {
s = s.toLowerCase(); // 将字母全部转换为小写
let slength = s.length
let left = 0, right = slength - 1; // 左指针指向字符串头 , 右指针指向字符串的尾部
while (left <= right) {
let reg = /[a-zA-Z0-9]$/ // 判断当前元素是否为字母或数字
let leftStr, rightStr
if (reg.test(s[right])) { // 如果是字母 当前元素赋值给 rightStr
rightStr = s[right]
} else {
right -- // 如果是非法字符 继续移动指针, continue 跳出循环
continue
}
if (reg.test(s[left])) {
leftStr = s[left]
} else {
left ++
continue
}
if (leftStr === rightStr) { // 如果两个元素相同 继续移动指针
left ++
right --
} else {
return false
}
}
return true
};
文章自己当做一个笔记, 也希望得到大佬们的指点