标签:
题目:(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);
}
}
}
}
标签:
原文地址:http://www.cnblogs.com/fengmangZoo/p/4198067.html