[LeetCode] Palindrome Partitioning II [12]

題目

Given a string s, partition s such that every substring of the partition is a palindrome.

Return the minimum cuts needed for a palindrome partitioning of s.

For example, given s = "aab",
Return 1 since the palindrome partitioning ["aa","b"] could be produced using 1 cut.

原題鏈接

解題思路

給一個字符串,如果字符串可以劃分成若干子迴文字符串,返回最小的劃分數量。
這個題如果還用之前求所有劃分組合的循環加遞歸方法的話,就會得到超時的錯誤。這是就要考慮別的方法,動態規劃倒是一個不錯的方法,但是動態規劃最重要的是要找到動態方程。
本題的動態方程:

dp[i] = min(dp[i], dp[j+1]+1)), i<=j<n;

dp[i] : 表示從 i 到串尾的最小劃分數。

代碼實現

下面代碼中imap[i][j]==1表示str[i]==str[j]並且從 i 到 j 的字符串是個迴文

class Solution {
public:
    int minCut(string s) {
        int n = s.size();
        vector<int> dp(n+1, 0);
        vector<vector<int> > imap(n+1, vector<int>(n+1, 0));
        for(int i=n-1;i>=0; --i){
            dp[i] = n-i;
            for(int j=i; j<n; ++j){
                if(s[i] != s[j]) continue;
                if(j-i<2 || imap[i+1][j-1]==1){
                    imap[i][j] = 1;
                    dp[i] = min(dp[i], dp[j+1] +1);
                }
            }
        }
        return dp[0]-1;
    }
};

如果你覺得本篇對你有收穫,請幫頂。
另外,我開通了微信公衆號--分享技術之美,我會不定期的分享一些我學習的東西.
你可以搜索公衆號:swalge 或者掃描下方二維碼關注我

(轉載文章請註明出處: http://blog.csdn.net/swagle/article/details/28904745 )

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章