139.单词拆分
【LetMeFly】139.单词拆分
力扣题目链接:https://leetcode.cn/problems/word-break/
给你一个字符串 s
和一个字符串列表 wordDict
作为字典。请你判断是否可以利用字典中出现的单词拼接出 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
提示:
1 <= s.length <= 300
1 <= wordDict.length <= 1000
1 <= wordDict[i].length <= 20
s
和wordDict[i]
仅有小写英文字母组成wordDict
中的所有字符串 互不相同
方法一:dp
用$dp[i]$表示字符串的前$i$个字母能否由字典中的单词拼接出来。
初始值dp[0] = true
用$n$代表待拼接字符串的长度
第一维循环$i$从$1$到$n$,依次判断待拼接字符串的前$i$个字母能否被拼接。
第二维循环$j$从$0$到$i - 1$,依次判断前i个字母
能否由已验证的能被拼接出来的前j个字母
和存在于字典中的 由 第j个到第i个字母 组成的单词
拼接而成。
如果dp[j]==true
并且原字符串的子串[j, i]
存在于字典中,就把dp[i]
标记为true
- 时间复杂度$O(n^2)$
- 空间复杂度$O(n)$
AC代码
C++
1 |
|
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/125991942
139.单词拆分
https://blog.letmefly.xyz/2022/07/26/LeetCode 0139.单词拆分/