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