LeetCode 131. Palindrome Partitioning

来源:互联网 发布:福建网络干部培训 编辑:程序博客网 时间:2024/05/16 12:35

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"]  ]


Use a pointer to keep tracking the left substr. Whenever we found a palindrome substring, push it into path vector until the pos reaches the end.


#include <string>#include <iostream>using namespace std;bool isPalindrome(string tmp) {    if(tmp.size() <= 1) return true;    int i = 0;    int j = tmp.size() - 1;    while(i <= j) {        if(tmp[i] != tmp[j]) return false;        i++;        j--;    }    return true;}void partition(string s, int pos, vector<string>& path, vector< vector<string> >& res) {    if(pos == s.size()) {        res.push_back(path);        return;    }    for(int i = pos; i < s.size(); ++i) {        string tmp = s.substr(pos, i - pos + 1);        if(isPalindrome(tmp)) {            path.push_back(tmp);            partition(s, i + 1, path, res);            path.pop_back();        }    }}vector< vector<string> > partition(string s) {    if(s.size() == 0) return {};    vector< vector<string> > res;    vector<string> path;    partition(s, 0, path, res);    return res;}int main(void) {    vector< vector<string> > res = partition("abcb");    for(int i = 0; i < res.size(); ++i) {        for(int j = 0; j < res[i].size(); ++j) {            cout << res[i][j] << ",";        }        cout << endl;    }}   


0 0