问题描述 :
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案的数量。
示例:
输入: “aab”
输出: 2
说明:可能的分割方案有:[ [“aa”,“b”],[“a”,“a”,“b”]]
输入说明 :
输入一个字符串 s,长度小于等于200.
输出说明 :
输出一个整数
输入范例 :
aab
输出范例 :
2
#include<iostream>
#include<vector>
using namespace std;
vector<vector<string>> res;
bool check( int i, int j,const string &s) {
if (j < i) return true;
if (s[i++] == s[j--]) return check( i, j,s);
else return false;
}
void dfs(int lastpoint,vector<string> &tmp,string &s){
if(lastpoint>=s.size()){
res.push_back(tmp);
return ;
}
for(int i=lastpoint;i<s.size();i++){
if(check(lastpoint,i,s)){
tmp.push_back(s.substr(lastpoint,i-lastpoint+1));
dfs(i+1,tmp,s);
tmp.pop_back();
}
}
}
vector<vector<string>> partition(string s){
vector<string> tmp;
dfs(0,tmp,s);
return res;
}
int main(){
string s;
cin>>s;
vector<vector<string>> re=partition(s);
cout<<re.size();
return 0;
}