题目链接
思路:动态规划
dp[i]解释:s得[0,i-1]个字符可以被wordDict拼出来
dp[0]设置为true
举例:
s=“leetcode”
wordDict=[“lee”,“leet”,“code”]
dp = [F,F,F,F,F,F,F,F,F]
dp=[T,F,F,F,F,F,F,F,F]
初始化完毕
i=3
dp=[T,F,F,T,F,F,F,F,F] //因为dp[0]=true,存在lee,所以 dp[3] = true
i=4
dp=[T,F,F,T,T,F,F,F,F] //因为dp[0] = true,存在leet,所以 dp[4] = true
i = 8
dp=[T,F,F,T,T,F,F,F,T] //因为dp[4] = true,存在code,所以dp[8] = true
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
boolean[] dp = new boolean[s.length()+1];
dp[0] = true;
for(int i = 1; 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()];
}
}