现在的位置: 首页 > 综合 > 正文

Palindrome Partitioning

2018年04月01日 ⁄ 综合 ⁄ 共 1032字 ⁄ 字号 评论关闭

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

思路:先用dict[i][j]保存string的下标从i到j是否是回文。可用DFS方法求解。
class Solution {
public:
    void partitionHelper(int start, int pos, vector<vector<bool> > &dict, vector<vector<string> >&res, vector<string>&perRes, string str) {
        if(start == str.length()) {
            if (!perRes.empty()) {
                res.push_back(perRes);
            }
            return;
        }
        int j;
        for(j=0; start+j<str.length(); ++j) {
            if(dict[start][start+j]) {
                perRes.resize(pos+1);
                string s(str.substr(start,j+1));
                perRes[pos] = s;
                partitionHelper(start+j+1,pos+1,dict,res,perRes,str);
            }
        }
    }
    vector<vector<string> > partition(string s) {
        vector<vector<string> > res;
        res.clear();
        if (s.empty()) {
            return res;
        }
        vector<vector<bool> > dict(s.length(), vector<bool>(s.length(),false));
        int n = s.size();
        int i,j,k1,k2;
        for(i=0; i<n; ++i) {
            dict[i][i] = true;
            for(j=i+1; j<n; ++j) {
                k1 = i, k2 = j;
                while(k1 < k2 && s[k1]==s[k2]) {
                    k1++,k2--;
                }
                if (k1>=k2) {
                    dict[i][j] = true;
                }
            }
        }
        vector<string> perRes;
        partitionHelper(0,0,dict,res,perRes,s);
        return res;
    }
};

抱歉!评论已关闭.