Wednesday, October 23, 2013

Palindrome Partitioning [Leetcode]

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

Solution: backtracking; DFS.

class Solution {
public:
    bool isPalindrome(string s){
        string str = s;
        reverse(str.begin(), str.end());
        return str==s;
    }
    void partitionHelper(vector<vector<string> > &ret, string s, int cur, vector<string> r){
        if(cur==s.size()){
            ret.push_back(r);
            return;
        }
        for(int i=s.size()-1; i>=cur; i--){
            if(isPalindrome(s.substr(cur, i-cur+1))){
                r.push_back(s.substr(cur, i-cur+1));
                partitionHelper(ret, s, i+1, r);
                r.pop_back();
            }
        }
    }
    vector<vector<string>> partition(string s) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        vector<vector<string> > ret;
        if(s.empty())
            return ret;
            
        int n = s.size();
        vector<string> r;
        partitionHelper(ret, s, 0, r);
        return ret;
    }
}; 

No comments:

Post a Comment