方法一:中心擴充套件演算法
解題思路:從左到右每乙個字元都作為中心軸,然後逐漸往兩邊擴充套件,只要發現有不相等的字元,則確定了以該字元為軸的最長回文串,但需要考慮長度為奇數和偶數的不同情況的處理(長度為偶數時軸心為中間兩個數的中心,長度為奇數時軸心為中間那個數)
演算法時間複雜度:$o(n^)$
string longestpalindrome(string方法二:manacher(馬拉車法)s) }
for (int j = 0; i - j >= 0 && i + j + 1
< s.size(); ++j) //
偶數 }
}return
s.substr(idx, maxl);
}
解題思路:詳見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...