回文串:
回文串的特点是中心对称。
回文串有两种情况:1.奇数类: 如 "aba"
2.偶数类:如" abba"
思路:
使用双指针法,用left,right分别从字符串的首和尾两侧逼近,检测 left,right 指向的字符是否一致。(while循环结构实现)。细节注意怎么去处理空字符串和字符的大小写,怎么筛选出含数字字母的字符。
代码:
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
char_list=[]
if len(s)==0:
return True
for char in s:
#必须是数字字母字符
if char.isalnum():
#必须进行大小写的转换,并连接成字符串
char_list.append(char.lower())
new_str="".join(char_list)
left,right=0,len(new_str)-1
while left<right:
if new_str[left]!=new_str[right]:
return False
left+=1
right-=1
return True
Python isalnum()方法 | 菜鸟教程 (runoob.com)
注意:
1.题目要求大写字符转换成小写字符.
Python lower()方法 | 菜鸟教程 (runoob.com)
lower()方法
s="SASSYBOX"
str=s.lower()
print(str)
输出结果:可见大写转化为小写
char.lower()
代码中使用当前遍历到的char字符调用lower()方法,会得到一个小写的字符
2.join()方法
Python join()方法 | 菜鸟教程 (runoob.com)
join()方法 能够把一个可迭代对象(列表,元组,字典,集合 ,字符串)的元素使用某个字符
将其连接成字符串
当遍历到的字符转化为小写字符后,应该使用join()方法将其连接成字符串
我最初的写法是错误的,join()方法接受的是可迭代对象,单个字符不是可迭代对象,因此执行不通过
错误代码如下:
for char in s:
#必须是数字字母字符
if char.isalnum():
#必须进行大小写的转换,并连接成字符串
new_str= " ".join(char.lower())
join()方法要求传入的是一个可迭代对象,因此可以采用创建一个储存字符的列表,再利用join()方法处理,将列表中的字符拼接成字符串
3. 移除所有非字母数字字符。
Python isalnum()方法 | 菜鸟教程 (runoob.com)
isalnum()方法 用于检测字符串是否由数字和字母组成,如果字符串至少有一个字符且所有字符都是数字或字母则返回True,否则返回False,可通过直接用字符调用该方法作为if语句的判断条件,过滤掉非字母数字的字符。