问题描述:
算法思想:
深度优先搜索(DFS)。
使用一个vector<vector< string>>类型的变量来保存所有可能的分割方案,使用一个vector< string>的变量来保存单次遍历时产生的临时方案。
代码:
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> result;
vector<string> tempVec;
DFS(s, result, tempVec, 0);
return result;
}
void DFS(string s, vector<vector<string>>& result, vector<string>& tempVec, int start)
{
if (start >= s.size())
{
result.push_back(tempVec);
}
for (int i = start; i < s.size(); i++)
{
string str = s.substr(start, i - start + 1);
if (isPalindrome(str))
{
tempVec.push_back(str);
DFS(s, result, tempVec, i+1);
tempVec.pop_back();
}
}
}
bool isPalindrome(string s) {
int lt = 0;
int rt = s.size() - 1;
if (s.size() == 1) return true;
while (lt < rt)
{
if (s[lt] != s[rt])
return false;
lt++;
rt--;
}
return true;
}
};