131. 分割回文串——dfs(未完)

DFS(深度优先遍历)+回溯。用递归的方式,对字符串进行切割。

对于上面的”aab”作为输入,可以这么寻找回文:
“a”+”ab”构成的回文串
“aa”+”b”构成的回文串
“aab”不是回文,所以直接退出。

关于这道题为什么会用dfs?没有想通。。。

解题思路link

  • 求所有答案,首先排除动态规划,应该是DFS (Palindrome Partitioning II 求个数才是动归)
  • 遇到要求所有组合、可能、排列等解集的题目,一般都是DFS + backtracking
  • 首先传入s="aab" path=[] res = [], 首先切割出"a"(然后是"aa" "aab" ...),然后判读它是不是回文串:
  • 如果不是,直接跳过
  • 如果是,则此时剩余的 s="ab", path += ["a"]
  • 写入res的判断是,当s=""时,记录结果
  • 优化:可以通过用DP来计算任意s[i:j]是否是回文,并保存结果,再执行DFS,如果发现某条string不是回文,就可以直接退出,从而减少计算量

知识点复习:

图的遍历

深度优先搜索遍历是沿着图的某一条分支遍历直到末端,然后回溯,再沿着另一条进行同样的遍历,直到所有的顶点都被访问过为止。

猜你喜欢

转载自blog.csdn.net/weixin_31866177/article/details/84308920