题目描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
思想:
将数字及字母过滤出来,过滤这个事件,就要想到filter
这个函数,判断是否是字母或者数字,用isalnum
这个函数,再有就是区分大小写,用到low
这个函数转小写。
代码:
class Solution:
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
s = ''.join(filter(str.isalnum,str(s.lower())))
return s==s[::-1]
知识点:几个函数的用法和注意事项
1..join()
:Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
用法
str = "-";
seq = ("a", "b", "c"); # 字符串序列
print str.join( seq );
输出:a-b-c
2.filter()
:filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
语法:
filter(function, iterable)
参数:
- function – 判断函数。
- iterable – 可迭代对象。
用法:
def is_odd(n):
return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)
输出:
[1, 3, 5, 7, 9]
3.isalnum()
:Python isalnum() 方法检测字符串是否由字母和数字组成。
用法:
str = "this2009"; # 字符中没有空格
print str.isalnum();
str = "this is string example....wow!!!";
print str.isalnum();
输出:
True
False
注意:
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())))
就好了