首页 > 代码库 > [leetcode] Word Break2

[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);              }          }      }}

  

[leetcode] Word Break2