解题思路
使用双指针,左指针向友移,右指针向左移,判断移动到的字符是否是字母或数字,是就判断是否相同,不是字母或数字则继续移动;终止条件为两指针相遇;
时间复杂度:O(|s|)O(∣s∣),其中 |s|∣s∣ 是字符串 ss的长度。
空间复杂度:O(|s|)O(∣s∣)。由于我们需要将所有的字母和数字字符存放在另一个字符串中,在最坏情况下,新的字符串与原字符串完全相同,因此需要使用 O(|s|)O(∣s∣) 的空间。
代码:
class Solution(object):
def isPalindrome(self, s):
if len(s)<2:
return True
s=s.lower #全变小写字母
left = 0
right = len(s)-1
while right-left>0:
if not s[left].isalnum(): #判断指针所指位置是否是字母或数字
left+=1
continue
if not s[right].isalnum():
right-=1
continue
if s[left]==s[right]:
left+=1
right-=1
else:
return False
return True