中心擴充套件法可以幫助減少在回文子串中暴力遍歷的一次迴圈,在普通暴力遍歷中,我們需要兩次迴圈分別確定左指標和右指標(即回文子串的左右邊界),然後還有一次迴圈向中間靠攏判斷。
中心擴充套件法將向中心靠攏的這一步改為了由中心向兩邊延申,由於回文子串有奇數和偶數之分,所以中心擴充套件法的起始點需要分兩種情況討論,即在遍歷變數i在遍歷的過程中,分別需要從i,i,和i,i+1開始。
# 中心擴充套件
len_s = len(s)
if len_s == 0:
return 0
res = 0
for i in range(len_s):
l_tmp, r_tmp = i, i
while l_tmp>=0 and r_tmp=0 and r_tmp2
class solution:
def longestpalindrome(self, s: str) -> str:
len_s = len(s)
if len_s == 0 or len_s == 1:
return s
max_len = 0
max_l, max_r = 0, 0
for i in range(len_s):
l_tmp, r_tmp = i, i
while l_tmp >= 0 and r_tmp < len_s and s[l_tmp] == s[r_tmp]:
if r_tmp - l_tmp + 1 > max_len:
max_len = r_tmp - l_tmp + 1
max_l = l_tmp
max_r = r_tmp
l_tmp -= 1
r_tmp += 1
l_tmp2, r_tmp2 = i, i+1
while l_tmp2 >= 0 and r_tmp2 < len_s and s[l_tmp2] == s[r_tmp2]:
if r_tmp2 - l_tmp2 + 1 > max_len:
max_len = r_tmp2 - l_tmp2 + 1
max_l = l_tmp2
max_r = r_tmp2
l_tmp2 -= 1
r_tmp2 += 1
return s[max_l:max_r+1]
回文串演算法 中心擴充套件法 Manacher演算法
為了方便分析,用字元 表示空字元,那麼對於字串 s aabcdefg 可以表示成 s a a b c d e f g 顯然,對於長度為n的字串s,可能的回文串的中心有n n 1 2 n 1個,即原字元數加 字元數。遍歷每乙個可能的中心點,以該中心點為基礎,生成回文串,即若兩末端字元相等,則回文串向兩...
最長回文子串,中心擴充套件法 C語言
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 因為是找回文子串,所以使用中心擴充套件法,中心擴充套件有兩種,一種是以單個字元 i,i 為中心,乙個是...
最長回文串之暴力法,中心擴充套件,動態規劃
正讀倒讀都一樣的整數 這個應該是最簡單的介紹了吧。用程式怎麼簡單實現呢?示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb public class isplalindrome public static boolean isplalind...