[leetcode] Word Break2

题目:(DP, Backtracing)

Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word.

Return all such possible sentences.

For example, given
s = "catsanddog",
dict = ["cat", "cats", "and", "sand", "dog"].

A solution is ["cats and dog", "cat sand dog"].

题解:


一条经典的 DP+Backtracing的题。dp 部分就是word break的代码, 然后后面一段就是backtracing的代码。

public class Solution {
    public boolean wordBreakcheck(String s, Set<String> dict) {
        if(s==null || s.length()==0)
            return true;
        boolean[] res = new boolean[s.length()+1];
        res[0] = true;
        for(int i=0;i<s.length();i++){
            StringBuilder str = new StringBuilder(s.substring(0,i+1));
            for(int j=0;j<=i;j++){
                if(res[j] && dict.contains(str.toString())){
                    res[i+1] = true;
                    break;
                }
                str.deleteCharAt(0);
            }
        }
        return res[s.length()];
    }
    
    public ArrayList<String> wordBreak(String s, Set<String> dict) {  
        ArrayList<String> res = new ArrayList<String>();  
        if(s==null || s.length()==0)  
            return res;
        if(wordBreakcheck(s,dict))
            helper(s,dict,0,"",res);  
        return res;  
    }  
    
    private void helper(String s, Set<String> dict, int start, String item, ArrayList<String> res){  
        if(start==s.length()){  
            res.add(item);  
            return;  
        }
        
        StringBuilder str = new StringBuilder();  
        for(int i=start;i<s.length();i++){  
            str.append(s.charAt(i));  
            if(dict.contains(str.toString())){  
                String newItem = new String();  
                if(item.length()>0)
                    newItem = item + " " + str.toString();
                else
                    newItem = str.toString();
                helper(s,dict,i+1,newItem,res);  
            }  
        }  
    }
}

  

原文地址:https://www.cnblogs.com/fengmangZoo/p/4198067.html