万能的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; } };