Day8-验证回文串

YVTU

🔗 LeetCode 125 - Valid Palindrome

📌 题目描述

给定一个字符串,判断它是否是回文,只考虑字母和数字字符,可以忽略字母的大小写。

示例:

1
2
3
4
5
输入: "A man, a plan, a canal: Panama"
输出: true

输入: "race a car"
输出: false

💡 解题思路

  • 使用双指针法;

  • 从头尾两端遍历,只保留字母和数字,统一转成小写后比较;

  • 忽略其他符号。

  • 时间复杂度:O(n)

  • 空间复杂度:O(1)


✅ JavaScript 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var isPalindrome = function(s) {
let left = 0, right = s.length - 1;

while (left < right) {
while (left < right && !isAlphaNum(s[left])) left++;
while (left < right && !isAlphaNum(s[right])) right--;
if (s[left].toLowerCase() !== s[right].toLowerCase()) return false;
left++;
right--;
}

return true;
};

function isAlphaNum(c) {
return /^[a-zA-Z0-9]$/.test(c);
}

🧠 思考拓展

  • 如何处理 Unicode 字符(如中文、Emoji)?
  • 如果需要考虑回文子串,如何优化?