拆分单词 dp
timu
题目:给定一个非空字符串 s 和一个包含非空单词列表的字典 ,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
说明:拆分时可以重复使用字典中的单词。字典中没有重复的单词。
样例:示例 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
- 一开始想着将题目给出的字符串建字典树,然后双指针,右指针遍历需要被分解的字符串,左指针是该字符串的起点,
- 不停在字典树中查询两个指针区间中字符串是否存在,存在则移动左指针,
- 但是样例3字典中存在
cat
cats
,原字符串都可以被分解,而双指针只能分解cat
,所以后边的分解全部不符合要求
dp:
dp[i]
表示原字符串[0,i]
能够被分解成字典中给出的单词- 记录给出字典中字符串的长度,遍历需要分解的字符串,
遍历到每个点i
时,再遍历字典中字符串j
,判断字符串j
是否能够拼接到以i
点作为结尾的原字符串中,dp[i - length[j]] == 1
则说明这段字符串可以分解[0,i]
这段原字符串
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!