Palindrome Partitioning

来源:互联网 发布:什么是网络计划 编辑:程序博客网 时间:2024/06/02 10:26

题目描述:

Given a string s, partition s such that every substring of the partition is a palindrome.

Return all possible palindrome partitioning of s.

For example, given s = "aab",
Return

[  ["aa","b"],  ["a","a","b"]]

使用回溯法,AC代码如下:

class Solution {public:    bool isOK(string s){int n = s.size();for (int i = 0, j = n - 1; i < j; ++i, --j){if (s[i] != s[j])return false;}return true;}vector<vector<string>> partition(string s){vector<vector<string>> ans;int n = s.size();if (n == 0) return ans;vector<int> lens(n, 0);int curPos = 0;int index = 0;while (index >= 0){++lens[index];while (curPos + lens[index] <= n && !isOK(s.substr(curPos, lens[index]))){++lens[index];}if (curPos + lens[index] > n){lens[index] = 0;--index;if (index >= 0)curPos -= lens[index];}else{curPos += lens[index];if (curPos == n){int tmpCurPos = 0;vector<string> tmpAns;for (int i = 0; i <= index; ++i){if (lens[i] > 0){tmpAns.push_back(s.substr(tmpCurPos, lens[i]));tmpCurPos += lens[i];}}ans.push_back(tmpAns);curPos -= lens[index];}else{++index;lens[index] = 0;}}}return ans;}};


0 0
原创粉丝点击