回文串之中心擴充套件法

2021-10-09 12:54:19 字數 1327 閱讀 3453

中心擴充套件法可以幫助減少在回文子串中暴力遍歷的一次迴圈,在普通暴力遍歷中,我們需要兩次迴圈分別確定左指標和右指標(即回文子串的左右邊界),然後還有一次迴圈向中間靠攏判斷。

中心擴充套件法將向中心靠攏的這一步改為了由中心向兩邊延申,由於回文子串有奇數和偶數之分,所以中心擴充套件法的起始點需要分兩種情況討論,即在遍歷變數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...