思路
- 定义一个bool类型的dp切片,dp[i]表示字符串s中前i个字符可以在wordDict中找到
- 初始化 dp[0] = true,空字符串可以被拆分。
- 遍历字符串 s 的每个位置 i,并在每个位置 j(0 <= j < i)检查子串 s[j:i] 是否在字典中,如果满足条件且 dp[j] = true,则更新 dp[i] = true。
- 最终返回 dp[len(s)] 表示整个字符串 s 能否被拆分。
代码
go
func wordBreak(s string, wordDict []string) bool {
n :=len(s)
dp := make([]bool,n+1)
dp[0]=true
for i:=1;i<=n;i++{
for j:=0;j<i;j++{
if dp[j] && contains(wordDict,s[j:i]){
dp[i]=true
break
}
}
}
return dp[n]
}
func contains(wordDict []string, word string) bool {
for _, w := range wordDict {
if w == word {
return true
}
}
return false
}