# 验证回文串(125)
# 题目
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
# 示例
输入: "A man, a plan, a canal: Panama"
输出: true
输入: "race a car"
输出: false
# 算法
# 双指针
左指针指向头部,右指针指向尾部,同时向中间移动,遇到字母数字之外的字符跳过继续移动
export const isPalindrome = (s) => {
let l = 0,
r = s.length - 1;
while (l < r) {
if (!((s[l] >= "A" && s[l] <= "Z") || (s[l] >= "a" && s[l] <= "z") || (s[l] >= "0" && s[l] <= "9"))) {
l++;
continue;
}
if (!((s[r] >= "A" && s[r] <= "Z") || (s[r] >= "a" && s[r] <= "z") || (s[r] >= "0" && s[r] <= "9"))) {
r--;
continue;
}
if (s[l].toLowerCase() !== s[r].toLowerCase()) {
return false;
}
l++;
r--;
}
return true;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 双指针 + 正则
export const isPalindrome = (s) => {
let str = s.replace(/[^A-Za-z0-9]/g, "").toLowerCase();
let l = 0,
r = str.length - 1;
while (l < r) {
if (str[l] !== str[r]) {
return false;
}
l++;
r--;
}
return true;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13