给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
思路:
- ◇ 双指针遍历;
- ◇ 找到最开始和最后面的一个为大小写字母或者数字的字符,如果没有则直接返回 true;
- ◇ 如果前指针小于后指针 ,则判断两者是否相同,相同继续,不相同直接返回 false 。
isPalindrome(s: string): boolean {
var front= 0;
var behind = s.length - 1;
while((s[front] < '0' || s[front] > '9') && (s[front] < 'a' || s[front] > 'z') && (s[front] < 'A' || s[front] > 'Z')) {
front ++;
}
while((s[behind] < '0' || s[behind] > '9') && (s[behind] < 'a' || s[behind] > 'z') && (s[behind] < 'A' || s[behind] > 'Z')) {
behind --;
}
while(front < behind) {
if(s[front].toLowerCase() != s[behind].toLowerCase()) {
return false;
}
else {
front ++;
behind --;
while((s[front] < '0' || s[front] > '9') && (s[front] < 'a' || s[front] > 'z') && (s[front] < 'A' || s[front] > 'Z')) {
front ++;
}
while((s[behind] < '0' || s[behind] > '9') && (s[behind] < 'a' || s[behind] > 'z') && (s[behind] < 'A' || s[behind] > 'Z')) {
behind --;
}
}
}
return true;
};