LeetCode 131. Palindrome Partitioning

来源:互联网 发布:老版本mac如何升级系统 编辑:程序博客网 时间:2024/06/07 14:11
题目:

Given a string s, partition s such that every substring of the partition is a palindrome.

Return all possible palindrome partitioning of s.

思路:主要是DFS搜索,假设到s[0~i]时是回形文,对 i 以后的的string分别进行判断能否组成回形文进行切割并存入临时变量里,一直到string尾为止,把结果加入最终的数组中,并退回进行搜索,退回时记得要删除临时变量里面已经记录过得string,相当于树的搜索,只是分支时是自己判断是否进行分支。

class Solution {public:    bool ispalindrome(const string& s, int start, int end)    {        while(start<=end)        {            if(s[start++]!=s[end--])            return false;        }        return true;    }    void dfs(string &s,int index,vector<string> &path,vector<vector<string>> & re)    {        if(index==s.size())        {            re.push_back(path);            return;        }        for(int i=index;i<s.size();i++)        {             if(ispalindrome(s, index, i)) {                path.push_back(s.substr(index, i - index + 1));                dfs(s, i+1, path, re);                path.pop_back();            }        }    }    vector<vector<string>> partition(string s)    {        vector<vector<string>> re;        int len=s.size();        if(len==0) return re;        vector<string> path;        dfs(s, 0, path, re);                return re;                    }};


原创粉丝点击