Leetcode:125. 验证回文串 总结

学习栈的时候,想着利用栈来验证回文,便找到了这道题。

确实受到了较大的栈的局限思路,可以直接倒序切片的,为什么还要多申请一个栈?

自己的错误代码

结果是,丑陋极了。错误总结!

class Solution:
    def isPalindrome(self, s: str) -> bool:
        s=s.lower()
        s=list(filter(str.isalnum,s))
        if s:
            if len(s)%2==0:
                mid=len(s)//2
                s1=s[0:mid:-1]
                s2=s[mid:]
            else:
                mid=(len(s)-1)//2
                s1=s[0:mid:-1]
                s2=s[mid+1:]
            
            if s1==s2:
                return True
            else: 
                return False
        else:
            return True

查了文档,知道了有str.isalnum() 和filter()这样的函数,便直接拿来用了,但是却没有想到在这里报错了。

IndentationError: unindent does not match any outer indentation level ^ s=list(filter(str.isalnum,s))

Line 4 (Solution.py)

最后输入:"A man, a plan, a canal: Panama"

所以,为什么会出错呢?

感觉像是有什么不能判断的。(之后再来填坑)呜呜

先来看文档:

str.isalnum()

如果字符串中的所有字符都是字母或数字且至少有一个字符,则返回 True , 否则返回 False 。 如果 c.isalpha() , c.isdecimal() , c.isdigit() ,或 c.isnumeric() 之中有一个返回 True ,则字符``c``是字母或数字。

filter(functioniterable)

用 iterable 中函数 function 返回真的那些元素,构建一个新的迭代器iterable 可以是一个序列,一个支持迭代的容器,或一个迭代器。如果 function 是 None ,则会假设它是一个身份函数,即 iterable 中所有返回假的元素会被移除。

请注意, filter(function, iterable) 相当于一个生成器表达式,当 function 不是 None 的时候为 (item for item in iterable if function(item));function 是 None 的时候为 (item for item in iterable if item) 。

str.join(iterable)

返回一个由 iterable 中的字符串拼接而成的字符串。 如果 iterable 中存在任何非字符串值包括 bytes 对象则会引发 TypeError。 调用该方法的字符串将作为元素之间的分隔。

官方参考之一:

class Solution:
    def isPalindrome(self, s: str) -> bool:
        sgood = "".join(ch.lower() for ch in s if ch.isalnum())
        return sgood == sgood[::-1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值