132.分隔回文串
給你乙個字串 s,請你將 s 分割成一些子串,使每個子串都是回文。
返回符合要求的 最少分割次數 。
示例:輸入:s = "aab"
輸出:1
這道題挺有意思的,和分隔回文串有點類似,但又有區別,這道題需要找到最小的分隔方案,且輸入的串比較長,用分隔回文串中用到的每次檢查是否是回文串時用到了雙指標,在大規模輸入時,這種方法並不好用,我們要用動態規劃進行預處理,從而減少檢查字串是不是回文串的時間,這是第一點。第二,如何定義狀態,設 f[n-1] 為長 n 的字串分隔為回文串所需要的最小次數,那麼如果前n-1
個字元為回文串,那麼,f[n-1] = f[n-2] + 1
,如果不是回文串,那麼我們就要進行搜尋,如果 0~i 為回文串,f[n-1] = f[i+1] + 1
,找到遍歷所有的i
使得f[n-1]
最小,這樣就完成整個演算法。
class solution
else
st[i][j] = (s[i] == s[j]) && st[i+1][j-1];}}
vectorf(n);
for (int j = 1; j < n; ++j) }}
return f[n-1];
}};
132 分割回文串 II
給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。返回符合要求的最少分割次數。示例 輸入 aab 輸出 1 解釋 進行一次分割就可將 s 分割成 aa b 這樣兩個回文子串。解法一 public class solution else return dp 0 解法二 如果從分割字串的角...
132 分割回文串 II
給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。返回符合要求的最少分割次數。示例 輸入 aab 輸出 1 解釋 進行一次分割就可將 s 分割成 aa b 這樣兩個回文子串。1.我最開始想到了要兩次dp,先算乙個是否是回文數的dp陣列,再算所求的dp。但第二個dp陣列我用的二維陣列,然...
每日一題 最長回文串
給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。在構造過程中,請注意區分大小寫。比如 aa 不能當做乙個回文字串。注意 假設字串的長度不會超過 1010。輸入 abccccdd 輸出 7 解釋 我們可以構造的最長的回文串是 dccaccd 它的長度是 7。將字串轉換為列表...