题目:
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"] ]
算法思想:
1,递归写法:从首字符k开始,找到字符串s中下个k,判断以两字符为首尾的子字符串A是否为回文,如果是的话用余下的字符串B作为参数传递给递归函数,然后将A插入到递归函数返回的结果中;如果不是的话继续寻找直至到字符串末尾。
2,迭代写法:这个可以在构建出IsPal[][]的基础上得到,参见点击打开链接。
vector
> partition(string s)
{
vector
> strss;
if (s.length() == 0)
return strss;
else if (s.length() == 1)
{
strss.push_back(vector
(1, s)); return strss; } else { char c = s[0]; for (int i = 0; i < s.length(); i++) { i = s.find_first_of(c, i); if (i == -1) break; string s_temp1 = s.substr(0, i+1); string s_temp2(s_temp1.rbegin(), s_temp1.rend()); if (s_temp1 == s_temp2) { vector
> strss_temp = partition(s.substr(i+1, s.length()-1)); if (strss_temp.size() == 0) { strss.push_back(vector
(1, s_temp1)); } else { for (int j = 0; j < strss_temp.size(); j++) { strss_temp[j].insert(strss_temp[j].begin(), s_temp1); strss.push_back(strss_temp[j]); } } } } return strss; } }