[LeetCode]Palindrome Partitioning 找出所有可能的回文组合
2014-11-09 10:51
267 查看
给定一个串,分割该串,使得每个子串都是回文串。找出所有可能的组合。
方法:暴搜+回溯
class Solution {
public:
int *b,n;
vector<vector<string> >ans;
void dfs(int id,string &s,int len){
if(id>=n){
if(len>0){
vector<string>vt;
vt.push_back(s.substr(0,b[0]+1));
for(int i=1;i<len;++i){
vt.push_back(s.substr(b[i-1]+1,b[i]-b[i-1]));
}
ans.push_back(vt);
}
return;
}
int j,k;
b[len]=id;
dfs(id+1,s,len+1);
for(j=id+1;j<n;++j){
for(k=0;id+k<j-k&&s[id+k]==s[j-k];++k);
if(id+k>=j-k){
b[len]=j;
dfs(j+1,s,len+1);
}
}
}
vector<vector<string> > partition(string s) {
n=s.size();
if(n==0)return ans;
if(n==1){
vector<string>vt;
vt.push_back(s);
ans.push_back(vt);
return ans;
}
b=new int
;
dfs(0,s,0);
return ans;
}
};
方法:暴搜+回溯
class Solution {
public:
int *b,n;
vector<vector<string> >ans;
void dfs(int id,string &s,int len){
if(id>=n){
if(len>0){
vector<string>vt;
vt.push_back(s.substr(0,b[0]+1));
for(int i=1;i<len;++i){
vt.push_back(s.substr(b[i-1]+1,b[i]-b[i-1]));
}
ans.push_back(vt);
}
return;
}
int j,k;
b[len]=id;
dfs(id+1,s,len+1);
for(j=id+1;j<n;++j){
for(k=0;id+k<j-k&&s[id+k]==s[j-k];++k);
if(id+k>=j-k){
b[len]=j;
dfs(j+1,s,len+1);
}
}
}
vector<vector<string> > partition(string s) {
n=s.size();
if(n==0)return ans;
if(n==1){
vector<string>vt;
vt.push_back(s);
ans.push_back(vt);
return ans;
}
b=new int
;
dfs(0,s,0);
return ans;
}
};
相关文章推荐
- [LeetCode]Palindrome Partitioning 找出所有可能的组合回文
- [LeetCode] 3Sum 找出所有三个元素之和为0的组合
- 数据结构与算法[LeetCode]—找出N个节点的BST的所有形态组合
- 找出一个字符数组(元素不重复)所有可能字符的组合
- 一个数组,找出两数之和为m的所有组合
- 从1-100中挑选出10个不同的数字,把可能的所有组合都打印出来
- 【每天算法2】:用java语言实现,一个组数:122345这6个数,打印出它所有可能的组合;要求4不能在第3位,3和5不能相连。
- 给定一个数组,求数组中所有元素的可能组合(每个元素只出现一次),使其和等于给定数的解决办法
- sql 多条件组合查询,并根据指定类别找出所有最小子类别的SQL语句备忘
- 打印出所有可能的括号组合
- 试题:找出数组中元素和为指定值的所有组合
- 找出数组中满足条件的所有组合!
- c# 组合字符串组成密码的所有可能
- 【微软谷歌面试100题--【21】从1-n中找出和为m的所有组合
- 写正确函数需要注意的地方:输入两个整数n和m,从数列1,2,3,...n中随意取几个数,使其和为m,列出所有可能组合
- 输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
- 给一个字符串(包含重复字符),打印它的所有可能的组合。
- 将长度为N的钢管截成长为n1,n2,n3各若干根,求所有可能的组合
- 编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包问题求解)
- 第21 题 2010 年中兴面试题 编程求解: 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来.