leetcode 125. Valid Palindrome 正则 python3

本文介绍了三种解决LeetCode上判断回文字符串问题的方法:手动筛选、正则表达式和双指针法。通过实例详细解析了每种方法的实现过程,帮助读者理解并掌握回文字符串的判断技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学期考试结束,重新开始刷leetcode!

一.问题描述

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

Note: For the purpose of this problem, we define empty string as valid palindrome.

Example 1:

Input: "A man, a plan, a canal: Panama"
Output: true

Example 2:

Input: "race a car"
Output: false

二.解题思路

这个是在判断原回文字符串的基础上加多了一点,就是出现的字符可能是非数字和字母,要忽略这些字符。

也就是说我们要先做一下筛选,判断字符是否是字母或者数字,同时字母大小写不影响,可以全部把字母转成小写再去判断。

1.自己动手筛选

就迭代字符串里的所有字符,判断一下是否是字母或者数字,是的话加进新生成的字符串里。

最后对这个新生成的字符串判断一下是否回文串,你可以简单的把字符串反转判断是否和反转前字符串相等,也可以用指针一个个判断,这个只用迭代字符串长度的一半。

不过虽然说只用迭代一般的字符串长度,但是还是没有内置函数快。

2.正则表达式

用python提供的re库来进行正则筛选,对所有非数字和字母的字符替换成空格。之后处理同上。

[^A-Za-z0-9]+, 这是筛选的正则表达式

关于正则给一个参考:正则表达式 - 匹配规则

3.双指针

思想和前面的差不多,只不过把筛选和匹配同时进行,两个指针指向一头一尾,如果遇到非数字或者字母,就往后或者往前移动一格,如果都是数字或者字母则匹配。

更多leetcode算法题解法: 专栏 leetcode算法从零到结束  或者 leetcode 解题目录 Python3 一步一步持续更新~

三.源码

1.自己动手

class Solution:
    def isPalindrome(self, s: str) -> bool:
        new_str=""
        for ch in s:
            if ch>='0' and ch<='9' or ch>='A' and ch<='Z'or ch>='a' and ch<='z':
                new_str+=ch.lower()
        for i in range(len(new_str)//2):
            if new_str[i]!=new_str[-i-1]:
                return False
        return True

2.正则

class Solution:
    def isPalindrome(self, s: str) -> bool:
        ss = re.sub('[^A-Za-z0-9]+', '', s).lower() 
        return ss == ss[::-1]

3.双指针

Python two pointer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值