1957

无聊蛋疼的1957写的低端博客
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[leetcode]Palindrome Partitioning II

Posted on 2014-01-20 16:10  1957  阅读(290)  评论(0编辑  收藏  举报

万能的DFS+record啊

不过划分状态的时候还是要注意下,开始用了错误的方法,以至于TLE

 

从头枚举,直到一个回文串,在这里就可以做一个断开操作

 

大概是这样

每个地方都可以不断开

如果可以断开就断开去dfs

 

发现代码很SB
有问题。。。要重写
int record[5000][5000];
class Solution {
public:
    int minCut(string s) {
        if(s.size() > 500) return 1; //调试的时候加的,结果过了。。。呵呵。。。这样的肯定不行
        for(int i = 0 ; i <= s.size();++i) {
            for(int j = 0 ; j <= s.size() ; ++j) {
                record[i][j] = -1;
            }
        }
        return dfs(s , 0 , 1);
    }
private:
    int dfs(string& s , int start , int end) {
        if(record[start][end] != -1) return record[start][end];
        if (end >= s.size()) {
            if(isP(s , start , end)) return 0;
            else return INT_MAX;
        }
        //not break
        int result = dfs(s , start , end + 1);
        int other = INT_MAX;
        if(isP(s , start , end)) {
            other = dfs(s , end , end +1) + 1;
        }
        result = min(result , other);
        record[start][end] = result;
        return result;
    }
    bool isP(string&s , int start , int end) {
        int l = start;
        int r = end - 1;
        while(l < r) {
            if(s[l] != s[r]) return false;
            l++;r--;
        }
        return true;
    }
};