学习栈的时候,想着利用栈来验证回文,便找到了这道题。
确实受到了较大的栈的局限思路,可以直接倒序切片的,为什么还要多申请一个栈?
自己的错误代码
结果是,丑陋极了。错误总结!
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
(function, iterable)用 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]