题目描述
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
Note: For the purpose of this problem, we define empty string as valid palindrome.
Example 1:
Input: “A man, a plan, a canal: Panama”
Output: true
Example 2:
Input: “race a car”
Output: false
算法思路
1)将输入的字符串去除标点符号,全部转化为小写
2)设置首尾指针,其中元素相等则首指针+1,尾指针-1,
3)如果最终首指针>=尾指针则是回文,否则就不是
算法实现
class Solution():
#转化函数
def toList(self,string):
string=string.lower()
string=string.replace(",","").replace(" ","").replace(":","")
return list(string)
#是否为回文
def isValidPalindrome(self,string):
strList=self.toList(string)
left=0
right=len(strList)-1
while left<right:
if strList[left]==strList[right]:
left+=1
right-=1
else:
break
return left>=right
test=Solution()
print(test.isValidPalindrome("A man, a plan, a canal: Panama"))
print(test.isValidPalindrome("race a car"))
小结
判断是否回文的通用方法是首尾双指针
判断最长回文的思路主要是两个字"扩展”