确定状态
最后一步:我们判断从0开始到最后一个字符的整一个字符串是否breakable,检查这个字符串中的substring是否在dict中,并且除掉substring的那一部分是否也可以breakable。
dp[i]表示0至i的字符串是否可以word break
状态转移方程
dp[i] = IsSubstringindict(j,i)&&dp[j] (其中j=i......0);
初始条件和边界条件
dp[0]=true
计算顺序
dp[0]
dp[1]
dp[2]
......
dp[n]
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
Set<String> hashset = new HashSet<String>();
for(String word:wordDict){
hashset.add(word);
}
int n = s.length();
boolean []dp = new boolean[n+1];
dp[0]=true;
for(int i=1;i<=n;i++){
for(int j=i;j>=0;j--){
if(!dp[j]) continue;
String substring = s.substring(j,i);
if(hashset.contains(substring)){
dp[i]=true;
break;
}
}
}
return dp[n];
}
}
注意在代码里面我们可以用一个hashset去存储dict中的字符,加快我们查询的速度