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"
.
这道题用动态规划做,在到string的下标i能被分割的情况下,计算接下来能被分割的下标j,此时只要枚举dict中的words即可。
新建辅助数组dp[],长度为s.length()+1,dp[0]=true,从而开始遍历过程。
public class Solution {
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++){
if(!dp[i])
continue;
for(String str:wordDict){
int len=str.length();
int end=i+len;
if(end>s.length())
continue;
if(dp[end])
continue;
if(s.substring(i,end).equals(str)){
dp[end]=true;
}
if(dp[s.length()])
return true;
}
}
return dp[s.length()];
}
}