0
点赞
收藏
分享

微信扫一扫

动态规划-leetcode-139


​​0️⃣python数据结构与算法学习路线​​ 学习内容:

  • 基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等…
  • 数据结构:字符串(string)、列表(list)、元组(tuple)、字典(dictionary)、集合(set)、数组、队列、栈、树、图、堆等…

题目:

给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
说明:

  • 拆分时可以重复使用字典中的单词。
  • 你可以假设字典中没有重复的单词。

输入输出:

输入: s = “leetcode”, wordDict = [“leet”, “code”]
输出: true
解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。

解题思路:

方法一:动态规划

动态规划-leetcode-139_动态规划

  1. 初始化dp = [False,⋯,False],长度为 n+1。即dp = [False]*(n+1)或dp = [0] * (n+1),n为字符串长度。dp[i]表示 s 的前 i 位是否可以用 wordDict 中的单词表示。
  2. 初始化 dp[0]=True,空字符可以被表示。

遍历字符串的所有子串,遍历开始索引 i,遍历区间 [0,n):

遍历结束索引 j,遍历区间 [i+1,n+1):

若 dp[i]=True且s[i,⋯,j) 在 wordlist 中:dp[j]=True。解释:dp[i]=True 说明 s 的前 i 位可以用 wordDict 表示,则 s[i,⋯,j) 出现在 wordDict 中,说明 s 的前 j 位可以表示。

  1. 返回 dp[n]

算法实现:

class Solution:
def wordBreak(self, s: str, wordDict: List[str]) -> bool:
n = len(s)
dp = [False]*(n+1)
dp[0]=True
for i in range(n):
for j in range(i+1,n+1):
if(dp[i] and (s[i:j] in wordDict)):
dp[j]=True
return dp[-1]

出现问题:

  1. 没有考虑到s为空的时候应该返回ture 所以设置dp[0] = 1


举报

相关推荐

0 条评论