题目

131. 分割回文串
难度中等509收藏分享切换为英文接收动态反馈
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: “aab”
输出:
[
[“aa”,”b”],
[“a”,”a”,”b”]
]

思路

搜索函数
从当前起点向后找,如果是回文,那就把结果放入,然后递归的找
如果满足结果,最后就会放入最终结果的数组

结束当前步的搜索就会把这个结果pop出来,相当于是一次回溯操作

  1. void dfs(const string& s, int i) {
  2. if (i == n) {
  3. ret.push_back(ans);
  4. return;
  5. }
  6. for (int j = i; j < n; ++j) {
  7. if (f[i][j]) {
  8. ans.push_back(s.substr(i, j - i + 1));
  9. dfs(s, j + 1);
  10. ans.pop_back();
  11. }
  12. }
  13. }

在搜索的时候需要快速的判断i,j段的字符串是不是回文
所以使用了动态规划直接存储