1. 读懂题目
2. 分析,推导解法,产生思路。
解题思路:双指针方式遍历并比较;
注意:需移除非字母数字字符,可直接调用python内置函数;
isalnum(字符是字母数字);isalpha(字符是字母);isdigit(字符是数字)
直接转化为小/大写比较比直接比较简单些。
'a'-'A'不能直接运算,需要ord()函数进行转换,较麻烦;
3.代码实现
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
l,r = 0,len(s)-1
# cha = 'a'-'A' # 小写在后
while l < r:
# 处理空格、逗号等非字母数字字符
# while l < r and ('A' < s[l] < 'Z' or 'a' < s[l] < 'z'):
# 直接调用python内置函数:isalnum(字符是字母数字);isalpha(字符是字母);isdigit(字符是数字)
while l < r and not s[l].isalnum():
l = l + 1
while l < r and not s[r].isalnum():
r = r- 1
# s[i]为大写or小写; s[i]&s[j]大/小写;s[i]大写&s[j]小写; s[i]小写&s[j]大写;
# 都转化为小写还是直接比?
# 都转化为小写字母,再比较
if l < r and s[l].lower() != s[r].lower():
return False
l,r =l+1, r-1
return True