您的位置:首页 > 其它

leetcode【Palindrome Partitioning 回文字符串划分】

2013-07-08 23:18 363 查看

描述

Palindrome Partitioning Feb 284465 / 15553

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

字符串能否划分成多个回文串?如果能,输出所有的划分方法。

分析

用递归来做,任意一个划分的方法,都是一个vector<string>,如果它非空,那么肯定存在他的第一个元素。对任意一个字符串s:

for i=1:s.length

s1=s[0~i]

s2=[i~end]

s1是回文串吗?如果不是,那就continue

如果是:

对s2进行递归,得到s2的输出,s2可能有多种划分方式,那么,在每一种的前面加上s1即可!

end

递归结束的条件是,输入的字符串长度为0(那么直接返回空的vector),或者输入的字符串的长度为1(返回仅包含该字母的veector)。

代码

class Solution {
public:
bool is_huiwen(const string &s)
{
int l=s.length();
int i;
for(i=0; i<l/2; i++)
if(s[i] != s[l-1-i])
return false;
return true;
}

vector<vector<string> > partition(string s)
{

int l=s.length();
//   cout<<"l="<<l<<endl;
vector<vector<string> >vv;
vector<string> v;
if(l==0)
{
return vv;
}

int i;
for(i=1; i<l; i++)
{
string ts=s.substr(0,i);
//   cout<<"i= "<<i<<" ts= "<<ts;
if(! is_huiwen(ts) )
continue;
string ts_end=s.substr(i,s.length() - i);
//    cout<<"ts_end = "<<ts_end<<endl;
vector<vector<string> > vvt;
vvt=partition(ts_end);
int j;
for(j=0; j<vvt.size(); j++)
{

vvt[j].insert(vvt[j].begin(), ts);
//  for(int m=0;m<vvt[j].size();m++)cout<<vvt[j][m]<<" ";cout<<endl;
vv.push_back(vvt[j]);
}
}
if(is_huiwen(s) )
{
v.push_back(s);
vv.push_back(v);
}
return vv;
}
};


Run Status: Accepted!

Program Runtime: 12 milli secs

Progress: 10/10 test cases passed.

inputoutputexpected
"a"[["a"]][["a"]]
"ab"[["a","b"]][["a","b"]]
"bb"[["b","b"],["bb"]][["b","b"],["bb"]]
"cdd"[["c","d","d"],["c","dd"]][["c","d","d"],["c","dd"]]
"dde"[["d","d","e"],["dd","e"]][["d","d","e"],["dd","e"]]
"efe"[["e","f","e"],["efe"]][["e","f","e"],["efe"]]
"fff"[["f","f","f"],["f","ff"],["ff","f"],["fff"]][["f","f","f"],["f","ff"],["ff","f"],["fff"]]
"abbab"[["a","b","b","a","b"],["a","b","bab"],["a","bb","a","b"],["abba","b"]][["a","b","b","a","b"],["a","b","bab"],["a","bb","a","b"],["abba","b"]]
"leet"[["l","e","e","t"],["l","ee","t"]][["l","e","e","t"],["l","ee","t"]]
"coder"[["c","o","d","e","r"]][["c","o","d","e","r"]]

Run Status: Accepted!

Program Runtime: 368 milli secs

Progress: 20/20 test cases passed.

inputoutputexpected
"a"[["a"]][["a"]]
"ab"[["a","b"]][["a","b"]]
"bb"[["b","b"],["bb"]][["b","b"],["bb"]]
"cdd"[["c","d","d"],["c","dd"]][["c","d","d"],["c","dd"]]
"dde"[["d","d","e"],["dd","e"]][["d","d","e"],["dd","e"]]
"efe"[["e","f","e"],["efe"]][["e","f","e"],["efe"]]
"fff"[["f","f","f"],["f","ff"],["ff","f"],["fff"]][["f","f","f"],["f","ff"],["ff","f"],["fff"]]
"abbab"[["a","b","b","a","b"],["a","b","bab"],["a","bb","a","b"],["abba","b"]][["a","b","b","a","b"],["a","b","bab"],["a","bb","a","b"],["abba","b"]]
"leet"[["l","e","e","t"],["l","ee","t"]][["l","e","e","t"],["l","ee","t"]]
"coder"[["c","o","d","e","r"]][["c","o","d","e","r"]]
"cbbbcc"[["c","b","b","b","c","c"],["c","b","b","b","cc"],["c","b","bb","c","c"],["c","b","bb","cc"],["c","bb","b","c","c"],["c","bb","b","cc"],["c","bbb","c","c"],["c","bbb","cc"],["cbbbc","c"]][["c","b","b","b","c","c"],["c","b","b","b","cc"],["c","b","bb","c","c"],["c","b","bb","cc"],["c","bb","b","c","c"],["c","bb","b","cc"],["c","bbb","c","c"],["c","bbb","cc"],["cbbbc","c"]]
"ccaacabacb"[["c","c","a","a","c","a","b","a","c","b"],["c","c","a","a","c","aba","c","b"],["c","c","a","a","cabac","b"],["c","c","a","aca","b","a","c","b"],["c","c","aa","c","a","b","a","c","b"],["c","c","aa","c","aba","c","b"],["c","c","aa","cabac","b"],["c","caac","a","b","a","c","b"],["c","caac","aba","c","b"],["cc","a","a","c","a","b","a","c","b"],["cc","a","a","c","aba","c","b"],["cc","a","a","cabac","b"],["cc","a","aca","b","a","c","b"],["cc","aa","c","a","b","a","c","b"],["cc","aa","c","aba","c","b"],["cc","aa","cabac","b"]][["c","c","a","a","c","a","b","a","c","b"],["c","c","a","a","c","aba","c","b"],["c","c","a","a","cabac","b"],["c","c","a","aca","b","a","c","b"],["c","c","aa","c","a","b","a","c","b"],["c","c","aa","c","aba","c","b"],["c","c","aa","cabac","b"],["c","caac","a","b","a","c","b"],["c","caac","aba","c","b"],["cc","a","a","c","a","b","a","c","b"],["cc","a","a","c","aba","c","b"],["cc","a","a","cabac","b"],["cc","a","aca","b","a","c","b"],["cc","aa","c","a","b","a","c","b"],["cc","aa","c","aba","c","b"],["cc","aa","cabac","b"]]
"racecar"[["r","a","c","e","c","a","r"],["r","a","cec","a","r"],["r","aceca","r"],["racecar"]][["r","a","c","e","c","a","r"],["r","a","cec","a","r"],["r","aceca","r"],["racecar"]]
"danaranad"[["d","a","n","a","r","a","n","a","d"],["d","a","n","a","r","ana","d"],["d","a","n","ara","n","a","d"],["d","a","naran","a","d"],["d","ana","r","a","n","a","d"],["d","ana","r","ana","d"],["d","anarana","d"],["danaranad"]][["d","a","n","a","r","a","n","a","d"],["d","a","n","a","r","ana","d"],["d","a","n","ara","n","a","d"],["d","a","naran","a","d"],["d","ana","r","a","n","a","d"],["d","ana","r","ana","d"],["d","anarana","d"],["danaranad"]]


自己写的测试代码:

#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<vector<string> > partition(string s) ;
int main()
{
string ss("ccaacabacb");
vector<vector<string> > vv = partition(ss);
int i,j;
for(i=0; i<vv.size(); i++)
{
for(j=0; j<vv[i].size(); j++)
{
cout<<vv[i][j]<<" ";
}
cout<<endl;
}

return 0;
}

bool is_huiwen(const string &s)
{
int l=s.length();
int i;
for(i=0; i<l/2; i++)
if(s[i] != s[l-1-i])
return false;
return true;
}

vector<vector<string> > partition(string s)
{

int l=s.length();
//   cout<<"l="<<l<<endl;
vector<vector<string> >vv;
vector<string> v;
if(l==0)
{
return vv;
}

int i;
for(i=1; i<l; i++)
{
string ts=s.substr(0,i);
//   cout<<"i= "<<i<<" ts= "<<ts;
if(! is_huiwen(ts) )
continue;
string ts_end=s.substr(i,s.length() - i);
//    cout<<"ts_end = "<<ts_end<<endl;
vector<vector<string> > vvt;
vvt=partition(ts_end);
int j;
for(j=0; j<vvt.size(); j++)
{

vvt[j].insert(vvt[j].begin(), ts);
//  for(int m=0;m<vvt[j].size();m++)cout<<vvt[j][m]<<" ";cout<<endl;
vv.push_back(vvt[j]);
}
}
if(is_huiwen(s) )
{
v.push_back(s);
vv.push_back(v);
}
return vv;
}


运行:

chen@chen-book1:~$ ./cpp

c c a a c a b a c b

c c a a c aba c b

c c a a cabac b

c c a aca b a c b

c c aa c a b a c b

c c aa c aba c b

c c aa cabac b

c caac a b a c b

c caac aba c b

cc a a c a b a c b

cc a a c aba c b

cc a a cabac b

cc a aca b a c b

cc aa c a b a c b

cc aa c aba c b

cc aa cabac b
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: