
代码:
- 哈希表存储字典中的单词
- dp表示当前长度的 s 是否可以被组成
dp[0]初始化,长度为 0 当然可以被组成
- 第一层 for 从长度为 1 开始,由小问题一步一步推向大问题
- 第二层 for 想要判断当前长度是否符合要求,自然要从当前问题的子问题,也就是当前长度的分段,查找当前长度的分段是否符合要求
- 即
dp[j] && wordDictSet[s[j:i]],即(0——j)和(j——i),前者可以直接用 dp 数组得到答案,因为这个子问题已经处理过了,如果符合条件则dp【i】为true,直接break就可以了
- 最后
dp[len(s)],就是我们要的最终问题的答案
func wordBreak(s string, wordDict []string) bool {
wordDictSet := make(map[string]bool)
for _, w := range wordDict {
wordDictSet[w] = true
}
dp := make([]bool, len(s) + 1)
dp[0] = true
for i := 1; i <= len(s); i++ {
for j := 0; j < i; j++ {
if dp[j] && wordDictSet[s[j:i]] {
dp[i] = true
break
}
}
}
return dp[len(s)]
}