给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome
思路:
注意题目要求:只考虑字母和数字字符,可以忽略字母的大小写,则设双指针分别指向起始和结尾,扫描一遍即可。
复杂度分析:
时间复杂度O(n) n为字符串长度
空间复杂度O(1)
var isPalindrome = function(s) {
let n = s.length;
let left = 0,right =n-1;
const check = (char)=>{
return (char>='a'&&char <= 'z')||(char>='A'&&char <= 'Z') ||(char >='0'&&char<='9')
}
while (left < right) {
while (left < right && !check(s[left])) {
++left;
}
while (left < right && !check(s[right])) {
--right;
}
if (left < right) {
if (s[left].toLocaleLowerCase() !== s[right].toLocaleLowerCase()) {
return false;
}
++left;
--right;
}
}
return true;
};