leetcode 最長回文子串

2021-09-19 19:21:34 字數 2051 閱讀 2000

題目:

給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。

示例 1:

輸入: "babad" 輸出: "bab" 注意: "aba" 也是乙個有效答案。

示例 2:

輸入: "cbbd" 輸出: "bb"

方法1:以每個字元為中心依次搜尋最長的回文子串

string longestpalindrom(string s) 

if (maxlen < right - left + 1)

} return s.substr(start, maxlen);

}

方法2:動態規劃,用乙個二維陣列dp[i][j]代表第i個字元到第j個字元是否為回文串。在判斷過程中,如果i與j相鄰則直接相等即可,如果,i與j不相鄰,那麼i到j是否為回文串,也與i+1到j-1是否為回文串有關

string longestpalindrom(string s) ;會報錯

int **dp = new int*[s.size()];//動態申請變數空間

for (int i = 0; i < s.size(); ++i)

//dp[i][j]中儲存第i個字元到第j個字元是否回文串

int left = 0, right = 0, len = 0;

for (int i = 0; i < s.size(); i++)

} }for (int i = 0; i < s.size(); i++)//用完之後一定要釋放

deletedp[i];

deletedp;

return s.substr(left, right - left + 1);

}

方法3:利用經典演算法馬拉車演算法,相對而言技巧性較高。但是直接將演算法複雜度由o(n^2)降至o(n)。其主要思路是先將字串處理成根據普遍性的情況,那就是在每個字元的兩邊加上#。比如,bob加上#則為#b#o#b#,noon加上#字元則為#n#o#o#n#;這樣就不用了再分別考慮回文子串是奇數個還是偶數個。同時,我們觀察可以發現此時,回文串的半徑正好等於未經處理回文串的長度。因此,在後期計算時,我們只用找經過處理之後的回文子串的半徑即可。因為,最後我們要輸出,最長的回文子串,所以我們不僅要知道子串的長度,還要知道它的起始位置在何處。這時,在處理好的字元前面加上乙個不是字串s中的也不是#的特殊字元,這樣 (中心位置 - 處理後子串初始位置)/2 就是最小回文子串的初始位置。在遍歷尋找最長子串時,主要是利用回文的對稱性。如下圖所示,其中id代表當前最長子串的中心,i為當前搜尋的中心下標,j為與i關於id對稱的座標值為i-2*id,mx為回文串的最右邊。陣列dp中儲存的是以下標位置為中心的最大回文串半徑

因此,當i如果 當 i>mx時,此時我們就只能以i為中心逐位對比,計算回文串的長度

每次計算完以i為中心的最長子串時,要將id更新為最長子串中心,mx更新為最長子串的最右邊

//用id代表當前最大回文串中心,mx代表回文串的最右邊

int id = 0, mx = 0, reslen=0,rescen=0;

vectorp(t.size(), 0);//用來儲存每個以當前位置為中心的最大回文串長度的半徑

for (int i = 1; i < t.size(); i++)

if (reslen < p[i])

} //開始位置為中心位置減去長度/2,到長度位置

return s.substr((rescen - reslen) / 2, reslen-1);

}

最長回文子串 LeetCode 五 最長回文子串

題目 最長回文子串 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。題目解析 回文?當回文串長度為奇數時,比如 北京計程車租出京北 當回文串長度為偶數的時候,比如 1221 以上兩種情況有乙個共同的特點就是有乙個中心,那在 中如何表示中心呢?class solution ...

leetcode 最長回文子串

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 中心拓展法 由乙個中心點開始向兩邊拓展,檢測邊界,判斷兩個值是否相等,相等則繼續拓展下去,檢測邊界。1....

最長回文子串(LeetCode)

給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb class solution def longestpalindrome self,s type s str r...