Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s = "leetcode"
,
dict = ["leet", "code"]
.
Return true because "leetcode"
can be segmented as "leet code"
.
第二次做这个题,感觉还有一些地方没有想清楚。还好最后靠自己写出来了。看到有用二维DP的,但是应该一维是足够的。想了下应该是这个样子:用一个dp数组,保存当前元素之前的部分是否构成法的划分。d p数组的大小为n+1, 最后返回的结果是dp[n];
对于上面的例子,写出d p数组最后的样子:
s = ["l,e,e,t,c,o,d,e"]
dp = [T,F,F,F,T,F,F,F,T]
动规的转移方程是:
代码:
public boolean wordBreak(String s, Set<String> wordDict) {
if(s == null) return false;
boolean [] dp = new boolean[s.length()+1];
dp[0] = true;
for(int i=0;i<=s.length();i++){
for(int j=0;j<i;j++){
if(dp[j] && wordDict.contains(s.substring(j,i))){
dp[i] = true;
}
}
}
return dp[s.length()];
}