題目描述:
給你乙個字串 s,找到 s 中最長的回文子串。
示例 1:
輸入:s = "babad"
輸出:"bab"
解釋:"aba" 同樣是符合題意的答案。
示例 2:
輸入:s = "cbbd"
輸出:"bb"
示例 3:
輸入:s = "a"
輸出:"a"
示例 4:
輸入:s = "ac"
輸出:"a"
方法一:暴力求解
class solution
}else break;
}temp = "";
}return res;}};
本題使用的方法是動態規劃,這裡需要找的是最長回文子串,首先第一步,我們需要定義dp陣列的含義,定義二維布林陣列dp[i][j]dp[i][j]陣列表示:
字串s[i\cdots j]s[i⋯j]是否為回文子串,如果是,dp[i][j] = true,如果不是,dp[i][j] = false。
如何我們現在已經知道了dp[i+1][j-1]了,那我們如何計算dp[i][j]呢?通過觀察,我們發現:
如果s[i] == s[j]那麼說明只要dp[i+1][j-1]是回文子串,那麼是dp[i][j]也就是回文子串
如果s[i]不等於s[j]那麼說明dp[i][j]dp[i][j]必定不是回文子串。
當只有乙個字母的時候肯定是回文子串,所以初始化的dp表應該如下圖所示:
但是這樣會有一種情況通過不了例如給的例子中的「cbbd」:
由於我們在dp表中表示不出來,那我們就在計算的時候單獨拿出來這種情況計算,即i和j相鄰的時候。
class solution
}for(int l=3;l<=len;l++)//l表示檢索的子串長度,等於3表示先檢索長度為3的子串}}
return s.substr(start,max);//獲取最長回文子串}};
刷題48 最長回文串
給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。在構造過程中,請注意區分大小寫。比如 aa 不能當做乙個回文字串。注意 假設字串的長度不會超過 1010。輸入 abccccdd 輸出 7 解釋 我們可以構造的最長的回文串是 dccaccd 它的長度是 7。charcode...
leetcode刷題 最長回文子串
看了一下題解,還有很多種方法,比如動態規劃,但是看了乙個下午也沒看太懂。所以就先把暴力破解弄懂吧。我這個菜雞,還要多多努力啊。主要問題在,不知道怎麼列舉字串的所有子串,題解中使用的是雙指標辦法,固定左指標,右指標移動得到全部的子串。最後,進行回文字串的驗證時,也是採用的雙指標方法來進行驗證。因此雙指...
最長回文字串
scanf s 輸入字串碰到空格或者tab就會停下來。此處可以使用fgets或者gets 另外注意標頭檔案cctype中的函式的巧妙使用,此處使用isalpha和toupper簡化了 此處列舉字串的中間位置,然後向倆邊擴充套件,節省了時間複雜度,注意向倆邊擴充套件時,奇數個和偶數個長度的區別。另外程...