# 验证回文串(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

# 双指针 + 正则

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