leetcode131—Palindrome Partitioning

leetcode131—Palindrome Partitioning

1.原题

原题链接

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

意思就是把字符串中,把所有的回文串找出来(任意组合,只需满足回文串的条件即可)。


2.分析

主要是两个步骤:

第一步:用一个二维矩阵dict[][]来存储是否是回文串的bool值,dict[i][j]==true,表示字符串从索引 i 到索引 j 长度为 ji+1 的子串为回文串。
第二步:有了第一步的信息,接下来的事情就简单多了,直接深搜。

3.代码

class Solution {
    private:
        vector< vector<bool> >dict;
    public:
        vector< vector<string> > partition(string s);
        void helper(string s,int index,vector<string>tmp,vector <vector<string> >&res);//搜索
        void init(string s);//初始化dict
        void subPalindrome(string s,int left,int right);//创建dict
};

void Solution::init(string s)
{
    vector<bool> tmp(s.size(),false);
    for(int i=0;ivoid Solution::subPalindrome(string s,int left,int right)
{    

    while(left>=0&&righttrue;
        left --;
        right ++;
    }
}

void Solution::helper(string s,int index,vector<string>tmp,vector<vector<string> >&res)
{
    if(index == s.size())
    {
        res.push_back(tmp);
        return;
    }
    for(int i=index;iif(dict[index][i])
        {
            tmp.push_back(s.substr(index,i-index+1));
            helper(s,i+1,tmp,res);
            tmp.pop_back();
        }
    }
}


vector < vector<string> > Solution::partition(string s)
{
    vector < vector<string> > res;
    vector<string> tmp;
    init(s);
    for(int i=0;i//奇
        subPalindrome(s,i,i+1);//偶
    }
    helper(s,0,tmp,res);
    return res;
}


你可能感兴趣的:(leetcode)