验证回文串
python
class Solution:
def isPalindrome(self, s: str) -> bool:
#使用双指针法
#创建左右两个指针,当左右指针位置不为数字或者字母时候,左指针往右移动,右指针往左移动
#然后判断左右两个指针所在是否相等,相等则接着循环,否则返回错误
left, right=0, len(s)-1
while left<right:
while left<right and not self.isright(s[left]):
left+=1
while left<right and not self.isright(s[right]):
right-=1
if left<right and s[left].lower() != s[right].lower() :
return False
left+=1
right-=1
return True
def isright(self,s):
return s.isdigit() or s.isalpha()
函数 str.isdigit(),str.isalpha() 判断传递字符串是否为数字或者字母
函数 str.upper(),str.lower() 将字符串转化为大写或者小写
尽量写子函数,独立开来
相向指针中的Reverse型
先写逻辑再进行书写
验证回文串II
python
class Solution:
#双指针算法,相向双指针
#做异常检测
#判断是否为回文串的依据是findDifferent函数返回的left,right,如果 left>=right,则为回文串
#先找出首先出现问题的left和right,如果 left>=right,则为回文串
#否则,判断left+1,right或者left,right-1是否回文串
def validPalindrome(self, s: str) -> bool:
if s is None:
return Flase
left,right=self.findDifferent(s,0,len(s)-1)
if left>=right:
return True
return self.isPalindrome(s,left+1,right) or self.isPalindrome(s,left,right-1)
#判断是否为回文串
def isPalindrome(self,s,left,right):
left,right=self.findDifferent(s,left,right)
return left>=right
#找到出现问题的left,right所在位置,并返回left,right
def findDifferent(self,s,left,right):
while left<right:
if s[left] != s[right]:
return left,right
left+=1
right-=1
return left,right