leetcode #131 in cpp

Solution:

We have already done in #4 about how to find palindrome in a string. Given isPal[i][j] which represents whether s[i...j] is palindrome, we could scan through the array to find the first palindrome A, then we go to collect the combination of other palindromes in the rest of the array. Once we get the collection, A + this collection would be the combination of palindromes in the array.  

Code:

class Solution {
public:
    vector<vector<string>> partition(string s) {
        int n = s.length();
        vector<vector<string>> res; 
        if(s.empty()) return res; 
        vector<vector<bool>> isPal(n, vector<bool>(n,false));
        //determine where the palindromes are in the string 
        for(int i = 0; i < n; i ++){
            isPal[i][i] = true;
            for(int j = 0; j < i; j ++){
                if( j== i -1){
                    isPal[j][i] = s[i]==s[j];
                }else{
                    isPal[j][i] = isPal[j+1][i-1] && s[j] == s[i]; 
                }
            }
        }
        vector<string> member;
        search(0,s,member, isPal,res);
        return res; 
    }
    void search(int start, string &s,vector<string>member, vector<vector<bool>> &pal, vector<vector<string>> &res){
        if(start >= s.length()) {
            res.push_back(member);
            return; 
        }
        for(int i = start; i < s.length(); i++){
            if(pal[start][i]){//if we have a panlidrome, record this panlidrome, and keep partition the array and find the panlidromes in the rest of the array.
                member.push_back(s.substr(start,i - start +1));
                search(i+1, s, member, pal, res);
                member.pop_back();
            }
        }
    }
    
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章