参照网上大神写的代码。用python封装好的就是快呀,应该是底层调用c的缘故吧
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
s_new = filter(str.isalnum,str(s)).upper()
return s_new == s_new[::-1]
相比之下,一些没用封装的,按照逻辑一步步来的,似乎代码没毛病,但与运行就是慢。164ms的。
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
if s == '':
return True
# lis = filter(lambda x:ord(x) in range(97,123) or ord(x) in range(48,58),list(s.lower()))
# lis_d = [i for i in lis]
s = s.lower()
lis_d = [i for i in s if ord(i) in range(97,123) or ord(i) in range(48,58)]
if lis_d != lis_d[::-1]:
return False
return True
【学到两个新函数】
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中
注意: Pyhton2.7 返回列表,Python3.x 返回迭代器对象,具体内容可以查看:Python3 filter() 函数
Python isalnum()方法
isalnum() 方法检测字符串是否由字母和数字组成。
str.isalnum()
注意str应该要是ascii编码,不然
new_s = list(filter(str.isalnum,s.lower()))时候会报错:
TypeError: descriptor 'isalnum' requires a 'str' object but received a 'unicode'
改成new_s = list(filter(str.isalnum,str(s.lower())))
就好了
python3的时候不用。
网友评论