def word_break(s,wordDict):
words=set(wordDict); dp=[False]*(len(s)+1); dp[0]=True
for i in range(1,len(s)+1):
for j in range(i):
if dp[j] and s[j:i] in words: dp[i]=True; break
return dp[len(s)]
public boolean wordBreak(String s,List<String> wordDict){
Set<String> words=new HashSet<>(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]&&words.contains(s.substring(j,i))){
dp[i]=true; break;
}
return dp[s.length()];
}
Python slice s[j:i] vs Java substring(j,i).
def word_break(s,wordDict):
words=set(wordDict); dp=[False]*(len(s)+1); dp[0]=True
for i in range(1,len(s)+1):
for j in range(i):
if dp[j] and s[j:i] in words: dp[i]=True; break
return dp[len(s)]
public boolean wordBreak(String s,List<String> wordDict){
Set<String> words=new HashSet<>(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]&&words.contains(s.substring(j,i))){
dp[i]=true; break;
}
return dp[s.length()];
}
1. dp[i] = can break s[:i] 2. Try all split points