316 字
2 分钟
LeetCode-139. 单词拆分
动态规划
给你一个字符串
s和一个字符串列表wordDict作为字典。如果可以利用字典中出现的一个或多个单词拼接出s则返回true。**注意:**不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。
示例 1:
输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。示例 2:
输入: s = "applepenapple", wordDict = ["apple", "pen"]输出: true解释: 返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。注意,你可以重复使用字典中的单词。示例 3:
输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]输出: false
思路
这题也是完全背包问题,物品的重量就是他的长度,只关心是否能否恰好装满背包,不关心其价值。
相较于 279. 完全平方数,这里只是多了一层字符串内容匹配的逻辑
func wordBreak(s string, wordDict []string) bool { wordMap := make(map[string]bool) for _, word := range wordDict { wordMap[word] = 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] && wordMap[s[j:i]] { dp[i] = true break } } }
return dp[len(s)]} LeetCode-139. 单词拆分
https://sheep44044.github.io/posts/算法/动态规划/leetcode-139-单词拆分/