注意是划分回文词,不是去判断一个大串是否是回文串
大致思路:
dfs去找就好了。
·看到一个小结论:如果要求输出所有可能的解,往往都是要用深度优先搜索。如果是要求找出最优的解,或者解的数量,往往可以使用动态规划。
·这里有一个很厉害的点:字符串的反向迭代器rbegin()和rend(),见图:
所以,判断一个字符串是否是回文,只需要一句话:
return s == string(s.rbegin(),s.rend()); //看s的反向是不是等于s
·注意:字符串的substr(起点,子串长度)
AC代码:
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> res;
vector<string> cur;
dfs(res,cur,s);
return res;
}
void dfs(vector<vector<string>> &res, vector<string> &cur, string s)
{
if(s=="")
{
res.push_back(cur);
return;
}
for(int i=1;i<=s.size();i++)
{
string sub = s.substr(0,i);
if(isPalindrome(sub))
{
cur.push_back(sub);
dfs(res,cur,s.substr(i,s.size()-i));
cur.pop_back(); //pop_back是移除vector最后一个元素,也就是移除这里加入的sub
}
}
}
bool isPalindrome(string s)
{
return s == string(s.rbegin(),s.rend());
}
};