错误原因
i循环和j循环的顺序很重要,如果i循环在外面的话有时候需要其他字符前面的支持才能判断以当前位置结尾的是true还是false,这时候如果没有前面的支持直接判错,后面用其他元素来填充的时候也没机会了,永远都是false了。
代码示例
func wordBreak(s string, wordDict []string) bool {
dp:=make([]bool,len(s))
for j:=0;j<len(dp);j++{
for i:=0;i<len(wordDict);i++{
if j-len(wordDict[i])+1 <0||s[j-len(wordDict[i])+1:j+1]!=wordDict[i]{
continue
}
if j-len(wordDict[i])==-1 || dp[j-len(wordDict[i])]==true{
dp[j]=true
}
}
}
return dp[len(dp)-1]
}