leetcode 5 最長回文子串 解題報告

2022-05-26 12:36:14 字數 809 閱讀 5084

方法一:中心擴充套件演算法

解題思路:從左到右每乙個字元都作為中心軸,然後逐漸往兩邊擴充套件,只要發現有不相等的字元,則確定了以該字元為軸的最長回文串,但需要考慮長度為奇數和偶數的不同情況的處理(長度為偶數時軸心為中間兩個數的中心,長度為奇數時軸心為中間那個數)

演算法時間複雜度:$o(n^)$

string longestpalindrome(string

s) }

for (int j = 0; i - j >= 0 && i + j + 1

< s.size(); ++j) //

偶數 }

}return

s.substr(idx, maxl);

}

方法二:manacher(馬拉車法)

解題思路:詳見p3805 【模板】manacher演算法

演算法時間複雜度為:$o(n)$

int pos[2005],p[2005

];

string longestpalindrome(string

s) s_new+="#"

;

/*manacher

*/int m=0,r=0,maxl=0,idx=0

;

for (int i=1;ii)

//更新回文長度(原始字串的回文長度為新字串回文半徑-1)

if (p[i]-1>maxl)

}return

s.substr(idx,maxl);

}

LeetCode5最長回文子串

給定乙個字串s,找到s中最長的回文子串。你可以假設s長度最長為1000。示例 輸入 babad 輸出 bab 注意 aba 也是有效答案示例 輸入 cbbd 輸出 bb 動態規劃來做,每個回文字串的子字串也是回文字串,即string是回文字串那麼它的string.substring 1,lenth ...

LeetCode 5 最長回文子串

問題描述 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 解決方案 中心擴充套件演算法 事實上,只需使用恆定的空間,我們就可以在 o n 2 的時間內解決這個問題...

leetcode5 最長回文子串

遞推式 1 一般 s i 1 s j 1 and j i and j i len s i 1,j 1 2 初始化dp矩陣對角線的值為 true,相鄰兩個元素相等時dp i i 1 為true 初始化回文串起始位置和長度。def longestpalindrome s n len s if s ret...