leetcode palindrome partition II
2015-03-31 20:33
225 查看
虽然写得烂而且TLE,好歹是正确的。。还是值得纪念的
class Solution {public:int pcut(string s, int start, int end){if (start >= end)return 0;stack<tuple<int, int>> pre;tuple<int, int> tmp;int i = 0, i2, j;int fir, sec, overlap;for (i = start; i < end; i++){i2 = i;while (i2 + 1 < end && s[i2] == s[i2 + 1]) i2++;j = 0;while (i - j - 1 >= start && i2 + j + 1 < end && s[i - j - 1] == s[i2 + j + 1]) j++;if (!pre.empty()){tmp = pre.top();//如果被包含在上一个回文中,则直接跳过if (i2 + j <= get<1>(tmp)){i = i2; continue;}//找出包含在当前回文中的以前的回文并删除while (get<0>(tmp) >= i - j){pre.pop();if (pre.empty()){break;}tmp = pre.top();}if (!pre.empty()){fir = get<0>(tmp), sec = get<1>(tmp);//处理重叠的部分if (fir < i - j && sec >= i - j){int min1 = pcut(s, start, i - j) + pcut(s, i - j, end);//收缩上一个回文int min2 = pcut(s, start, sec + 1) + pcut(s, sec + 1, end);//收缩当前回文return min1 < min2 ? min1 + 1 : min2 + 1;}}}pre.push(make_tuple(i - j, i2 + j));i = i2;}return pre.size() - 1;}int minCut(string s) {if (s.length() <= 1)return 0;return pcut(s, 0, s.length());}};虽然写得烂而且TLE,好歹是正确的。。还是值得纪念的
相关文章推荐
- [Leetcode] palindrome partition ii 回文分区
- LeetCode —— Palindrome Partition II
- Leetcode: Palindrome Partition I II
- LeetCode "Palindrome Partition II" - Double DP
- [LeetCode] Palindrome Partitioning II, Solution
- [Leetcode][JAVA] Palindrome Partitioning II
- Java for LeetCode 132 Palindrome Partitioning II
- leetcode:Palindrome Partitioning II
- [Leetcode][python]Palindrome Partitioning/Palindrome Partitioning II
- leetcode——132—— Palindrome Partitioning II
- [LeetCode]Palindrome Partitioning II
- leetcode Palindrome Partitioning II DP 深搜
- 【leetcode】Palindrome Partitioning II
- Leetcode_palindrome-partitioning-ii
- LeetCode-Palindrome Partitioning II
- LeetCode 680. Valid Palindrome II (验证回文字符串 Ⅱ)
- [leetcode-132]Palindrome Partitioning II(java)
- [LeetCode] Palindrome Partitioning II
- leetcode Palindrome Partitioning II
- Palindrome Partitioning II -- leetcode