LeetCode第五題最長回文子串

2021-10-23 20:54:39 字數 790 閱讀 3735

@leetcode第五題最長回文子串

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

示例輸入: 「babad」

輸出: 「bab」

注意: 「aba」 也是乙個有效答案。

輸入: 「cbbd」

輸出: 「bb」

解題思路:我們可以用動態規劃演算法來解答此題,定義乙個dp二維陣列dp[i][j],dp[i][j]表示從j開始到i結束的子串是否文回文子串,如果是,我們可以把dp[i][j]的值置為1,這樣不難發現狀態轉移方程為dp[i][j] = ( dp[i][j] = (dp[i-1][j+1] == 1 && s[i] == s[j] ? 1: 0),如果dp[i][j]為回文子串,那麼從i-1到j+1的字串也一定是回文子串,並且要s[i] == s[j],找到轉移方程之後便可以找邊界條件了,如果原字串長度小於2,那麼返回原字串自己,還有乙個邊界條件,當i-j<2時,dp[i][j] = (s[i] == s[j] ? 1 : 0),最後我們只需要每次更新回文子串的起始位置和最大程度就可以了

原碼:char * longestpalindrome(char * s)

else

if(dp[i][j] == 1 && (i-j+1) > maxlen)}}

char *ptr = (char *)malloc((maxlen+1) * sizeof(char));

strncpy(ptr,s+start,maxlen);

ptr[maxlen] = 『\0』;

return ptr;

}

leetCode第五題 最長回文子串

題目 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。用例 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。輸入 cbbd 輸出 bb 本題採用動態規劃演算法進行題解,關於動態規劃可以查詢一些關於他的資料,本題目屬於比較簡易的規劃演算法,只要找到...

leetcode第五題 尋求最長回文子串

1.思路 1.暴力解法 直接遍歷,兩頭收縮。class solution int maxlen 1 int begin 0 char chararray s.tochararray for int i 0 i return s.substring begin,begin maxlen 驗證是否為回文...

leetcode第五題 最長回文子字串

題目 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 中心擴充套件演算法 回文中心的兩側互為映象。因此,回文可以從它的中心展開,由於所含字母數為偶數的回文的中心...