单词拆分(一)
https://www.lintcode.com/problem/107/?utm_source=sc-libao-ql
描述
给定字符串 s
和单词字典 dict
,判断是否可以利用字典 dict
中的出现的单词拼接出 s
,其中字典 dict
中的单词可以重复使用。
因为我们已经使用了更强大的数据,所以普通的DFS方法无法解决此题。
样例
样例 1:
输入:
输出:
解释:
lintcode可以分成lint和code。
样例 2: 输入:
输出:
解释:
a在dict中。
分析: 解题思路
解题思路:
该题目是一个典型的动态规划问题,旨在判断一个字符串 s
是否可以拆分成字典中的单词组合。通过设置一个 dp
数组,我们可以逐步判断每个子串是否能够在字典中找到。
初始化
dp
数组,dp[i]
表示字符串前i
个字符能否被字典中的单词组合拆分。设置
dp[0]
为True
,表示空字符串可以被完全拆分。遍历字符串的每个字符,并检查从当前字符向前
max_len
长度的字串是否在字典中。如果某个子串存在于字典中且之前的状态
dp[j]
为True
,则更新当前状态dp[i]
为True
。最终返回
dp[n]
,表示整个字符串是否可以被拆分成字典中的单词组合。
也可以用dfs+memo做.
Last updated