给一个字符串s,和一个字典dict,判断字符串是否能够由字典中词组成?
解析:通过动态规划 如果一个词的前面位置可以由词典位置表示,那我们只需要判断后面位置能不能通过词典表示即可
import java.util.HashSet;
import java.util.Set;
public class wordBreak {
public static void main(String[] args) {
String str = "dogs";
Set<String> dict = new HashSet<String>();
dict.add("dog");
dict.add("s");
boolean result = wordBreak1(str,dict);
System.out.print(result);
}
public static boolean wordBreak1(String s, Set<String> dict) {
if(s==null || s.length()==0)
return true;
//这里 res[i] 代表i之前的字符是否由字典中词组成,初始化为False
boolean[] res = new boolean[s.length()+1];
res[0] = true;
for(int i=0;i<s.length();i++)
{
//注意StringBulider 不能有String直接赋值
StringBuilder str = new StringBuilder(s.substring(0,i+1));
for(int j=0;j<=i;j++)
{
//第一个条件res[j] 表明 str 之前的元素能够在字典中找到
if(res[j] && dict.contains(str.toString()))
{
res[i+1] = true;
break;
}
str.deleteCharAt(0);
}
}
return res[s.length()];
}
}