坐标型动态规划序曲之DFS剪枝

Posted 超级码厉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了坐标型动态规划序曲之DFS剪枝相关的知识,希望对你有一定的参考价值。

DFS深度优先在树/图的遍历中经常用到。DFS递归过程中存在较多重复计算问题,部分题可以转换成动态规划思路求解。今天先用常规的DFS剪枝法求解下题,然后再逐渐引入动态规划思路。


Given a string s, partition s such that every substring of the partition is a palindrome.

Return all possible palindrome partitioning of s.

Example:

Input: "aab"Output:[  ["aa","b"],  ["a","a","b"] ]


public class PalindromePartitioning {
public List<List<String>> partition(String s) {      List<List<String>> result = new ArrayList<List<String>>();      List<String> list = new ArrayList<String>();      if(s == nullreturn result;      //DFS      dfs(0,s,list,result);      //      return result; }
public void dfs(int start, String s, List<String> list, List<List<String>> result) {      if(start == s.length()) {        result.add(new ArrayList<String>(list));      }
for(int i = start; i < s.length(); i++) {        if(isPalindrome(s.substring(start,i+1))) {            list.add(s.substring(start,i+1));            dfs(i+1, s, list, result);            list.remove(list.size() - 1);         }      } }
public boolean isPalindrome(String s) { int l = 0; int r = s.length() - 1; while(l < r) {          if(s.charAt(l) != s.charAt(r)) {              return false;           } else {              l++;              r--;           } } return true; }
}


以上是关于坐标型动态规划序曲之DFS剪枝的主要内容,如果未能解决你的问题,请参考以下文章

邮票面值设计 (动态规划+DFS)

坐标型动态规划总结,再附两个算法

算法动态规划 ④ ( 动态规划分类 | 坐标型动态规划 | 前缀划分型动态规划 | 前缀匹配型动态规划 | 区间型动态规划 | 背包型动态规划 )

算法动态规划 ④ ( 动态规划分类 | 坐标型动态规划 | 前缀划分型动态规划 | 前缀匹配型动态规划 | 区间型动态规划 | 背包型动态规划 )

dp(动态规划之最佳路径+dfs)

动态规划三:常见状态与常见递推关系式