LeetCode-Palindrome Partitioning

class Solution {
public:
    vector<vector<string>> partition(string s) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        vector<vector<string> > sets;
        vector<vector<bool> > F(s.size(), vector<bool>(s.size(), false));
        for (int i = s.size() - 1; i >= 0; --i)
            for (int j = i; j < s.size(); ++j)
                F[i][j] = s[i] == s[j] && (j - i < 2 || F[i + 1][j - 1]);
        vector<string> curSet;
        dfs(0, s, curSet, sets, F);
        return sets;
    }
    
    void dfs(int beg, string &s, vector<string> &curSet, vector<vector<string> > &sets, const vector<vector<bool> > &F)
    {
        if (beg == s.size())
        {
            sets.push_back(curSet);
            return;
        }
        for (int i = beg; i < s.size(); ++i)
        {
            if (F[beg][i])
            {
                curSet.push_back(s.substr(beg, i - beg + 1));
                dfs(i + 1, s, curSet, sets, F);
                curSet.pop_back();
            }
        }
    }
};

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