通过大量的使用容器完成
vector<vector<string>> partition(string s) {
vector<vector<string>> res;
vector<string> temstring;
int leng = s.size() - 1;
int tsize;
bool o;
map<char, vector<int>> mymap;
for (int i = 0; i <= leng; ++i)
mymap[s[i]].push_back(i);
map<int, vector<int>> bmap;
map<char, vector<int>>::iterator it = mymap.begin();
while (it != mymap.end())
{
tsize = it->second.size();
for (int i = 0; i < tsize; ++i)
{
bmap[it->second[i]] = {1};
for (int j = i + 1; j < tsize; ++j)
{
o=true;
for (int k = 0; k <= (it->second[j] - it->second[i]) / 2; ++k)
if (s[it->second[i] + k] != s[it->second[j] - k])
{
o=false;
break;
}
if(o) bmap[it->second[i]].push_back(it->second[j]- it->second[i]+1);
}
}
it++;
}
push(res, bmap, temstring, 0, s);
return res;
}
void push(vector<vector<string>>& vv, map<int, vector<int>>& bmap, vector<string> t, int nowend,string& s)
{
if (nowend == s.length()) vv.push_back(t);
else
{
vector<string> s1=t;
for (int i = 0; i < bmap[nowend].size(); ++i)
{
s1=t;
s1.push_back(s.substr(nowend, bmap[nowend][i]));
push(vv, bmap, s1, nowend + bmap[nowend][i], s);
}
}
}