python找回文子串的方法
1、雙指針兩邊擴展
遍歷指針為i,j=i+1,i左移,j右移。判斷是否相等將長度,下標賦給臨時變量,最后切片返回。唯一的大坑。回文字符串長度可以是奇數也可以是偶數。奇數的時候,內層循環從i-1開始。邊界條件也需要處理好。
classSolution(object):
deflongestPalindrome(self,s):
"""
:types:str
:rtype:str
"""
n=len(s)
maxL,maxR,max=0,0,0
foriinrange(n):
#長度為偶數的回文字符串
start=i
end=i+1
whilestart>=0andend ifs[start]==s[end]: ifend-start+1>max: max=end-start+1 maxL=start maxR=end start-=1 end+=1 else: break #長度為奇數的回文子串 start=i-1 end=i+1 whilestart>=0andend ifs[start]==s[end]: ifend-start+1>max: max=end-start+1 maxL=start maxR=end start-=1 end+=1 else: break returns[maxL:maxR+1] 2、Manacher算法 由于在輸入預處理的步驟中,將所有的回文子字符已經轉為奇數長度。所以在下面的操作中,只需要將輸入的每一個字符,都當做一個回文子字符的中心位即可。不需要考慮偶數長度的回文子字符。 ''' @author:YizhouZhao ''' #設置radius[i]=1,因為字符本身也是一個回文數 radius[i]=1 while(string[i-radius[i]]==string[i+radius[i]]): radius[i]+=1 以上就是Python找回文子串的方法,希望對大家有所幫助。更多Python學習教程請關注IT培訓機構:千鋒教育。