您的位置:首页 > 其它

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,好歹是正确的。。还是值得纪念的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: