单词拆分2

主要的思想是 DP + DFS:动态规划法和深度优先法
先用动态规划法判断是否成功划分;再用深度优先算法来确定划分情况。

  public List wordBreak(String s, List wordDict) {

        List res = new ArrayList();

        //dp 判断能否拆分
        boolean[] dp = new boolean[s.length()+1];
        dp[0] = true;
        for(int i=0 ;i<=s.length();i++){
          for(int j=0;j wordDict,StringBuilder sb,List res,int start){

        if(start == s.length()){
            res.add(sb.toString().trim());
            return;
        }

        for(int i=start+1;i<=s.length();i++){
            String str = s.substring(start,i);
            if(wordDict.contains(str)){
                int length = sb.length();
                sb.append(str).append(" ");
                dfs(s,wordDict,sb,res,i);
                sb.setLength(length);
            }
        }

    }


你可能感兴趣的:(IT,计算机,编程,算法)