leetcode Palindrome Partitioning II
来源:互联网 发布:品质淘生活 淘宝达人 编辑:程序博客网 时间:2024/06/05 04:04
起初分析题目 | 与 ||, 发现 || 可以在 | 的基础上稍作改变即可,提交如下代码后发现对于数据量比较大的测试用例出现超时问题。
超时的代码:
class Solution{public:int minCut(string s){ int size = s.length(); min = size+1;vector<bool> flag(size, false);bool **partitionLoc = new bool *[size];for(int i = 0; i < size; ++i){partitionLoc[i] = new bool[size];for(int j = 0; j < size; ++j)partitionLoc[i][j] = false;}for(int i = 1; i <= size; ++i){string substr = s.substr(0,i);if(judgePalindrome(substr)){flag[i-1] = true;partitionLoc[i-1][0] = true;}if(flag[i-1]){for(int j = 1; j <= size - i; ++j){if(judgePalindrome(s.substr(i,j))){flag[i+j-1] = true;partitionLoc[i+j-1][i] = true;}}}}vector<int> insertBlankLoc;vector<vector<string>> result;partitionHelper(s, size, size-1, flag, partitionLoc, insertBlankLoc, result);return min;}void partitionHelper(string s, int size, int currentPos, vector<bool> flag, bool **partitionLoc, vector<int> insertBlankLoc, vector<vector<string> > &result){if(currentPos==-1){if(min>insertBlankLoc.size()) min = insertBlankLoc.size();return ;}for(int i = 0; i < size; ++i){if(partitionLoc[currentPos][i]){insertBlankLoc.push_back(i);partitionHelper(s, size, i-1, flag, partitionLoc, insertBlankLoc, result);insertBlankLoc.pop_back();}}}bool judgePalindrome(string s){for(int i = 0 ;i < s.length()/2; ++i){if(s[i]!=s[s.length()-i-1])return false;}return true;}private: int min;};
后参考博客http://blog.csdn.net/yutianzuijin/article/details/16850031
其将该问题解释的非常清晰易懂
最后代码为
class Solution{public: int minCut(string s) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. int len = s.size(); int* dp = new int[len+1]; for(int i=len; i>=0; i--) dp[i] = len-i; bool** matrix = new bool*[len]; for(int i=0; i<len; i++) { matrix[i] = new bool[len]; memset(matrix[i], false, sizeof(bool)*len); } for(int i=len-1; i>=0; i--) for(int j=i; j<len; j++) { if(s[i] == s[j] && (j-i<2 || matrix[i+1][j-1])) { matrix[i][j] = true; dp[i] = min(dp[i], dp[j+1]+1); } } return dp[0]-1; } };
0 0
- LeetCode : Palindrome Partitioning II
- [leetcode] Palindrome Partitioning II
- leetcode:Palindrome Partitioning II
- 【leetcode】Palindrome Partitioning II
- leetcode - Palindrome Partitioning II
- [LeetCode]Palindrome Partitioning II
- [Leetcode]Palindrome Partitioning II
- [leetcode]Palindrome Partitioning II
- leetcode Palindrome Partitioning II
- LeetCode-Palindrome Partitioning II
- [leetcode] Palindrome Partitioning II
- LeetCode - Palindrome Partitioning II
- [Leetcode]Palindrome Partitioning II
- 【leetcode】Palindrome Partitioning II
- LeetCode Palindrome Partitioning II
- [leetcode]Palindrome Partitioning II
- [LeetCode] Palindrome Partitioning II
- [LeetCode] Palindrome Partitioning II
- UVA - 10192Vacation(LIS)
- 【linux】挂载命令mount
- OnCreate消息函数
- hdu 2795 Billboard(线段树-剩余空间)
- UVA1368- DNA Consensus String
- leetcode Palindrome Partitioning II
- GIS地图在房地产中的应用
- 贝塞尔三次方曲线优化, 24次乘法转换成6次加法
- CTabView使用方法
- ASIHTTPRequest官方文档
- JAVA中file路径问题
- hdu 4925 Apple Tree
- ci得到控制器类名和函数名的方法和PHP获取当前类名、函数名、方法名方法
- 让js支持getElementsByClassName