返回
36. 验证回文串:算法解读与 LeetCode 题解
前端
2023-11-12 12:02:08
各位算法爱好者,大家好!今天,我们来探讨 LeetCode 第 36 题——验证回文串。让我们踏上算法探秘之旅,一探究竟!
引言
字符串是否回文,即正反读都相同,是算法中一个有趣且常见的考察点。今天,我们就来深入理解验证回文串的本质,并通过 LeetCode 题解来巩固我们的算法技能。
算法详解
回文串本质上是一个对称结构,因此我们可以采取以下步骤:
- 忽略大小写和非字母数字字符: 将字符串转换为小写并移除所有非字母数字字符。
- 双指针技巧: 使用两个指针
left
和right
分别指向字符串的开头和结尾。 - 指针比较: 比较
left
指针和right
指针指向的字符是否相同。如果相同,则继续前进;如果不相同,则字符串不是回文。 - 重复步骤 3: 直到
left
指针大于等于right
指针。
代码实现
def isPalindrome(s):
# 忽略大小写和非字母数字字符
s = s.lower()
s = ''.join(filter(str.isalnum, s))
# 双指针技巧
left, right = 0, len(s) - 1
while left <= right:
if s[left] != s[right]:
return False
left += 1
right -= 1
return True
LeetCode 题解
在 LeetCode 上,这道题的题解同样采用了双指针技巧。值得注意的是,题解中还使用了正则表达式来一次性过滤掉非字母数字字符,代码更加简洁。
完整代码:
import re
class Solution:
def isPalindrome(self, s: str) -> bool:
s = s.lower()
s = re.sub('[^a-z0-9]', '', s)
left, right = 0, len(s) - 1
while left <= right:
if s[left] != s[right]:
return False
left += 1
right -= 1
return True
结语
验证回文串算法看似简单,但它巧妙地运用了双指针技巧,充分利用了回文的对称性。通过今天的探究,我们不仅巩固了算法基础,也为解决类似问题积累了宝贵经验。加油,算法小达人们!