查看: 1018| 回复: 0
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 求分析两种word break的写法

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
一种写的比较多,动态规划改记忆化递归写法:
  1. class Solution(object):
  2.     def wordBreak(self, s, wordDict):
  3.         """
  4.         :type s: str
  5.         :type wordDict: List[str]
  6.         :rtype: bool
  7.         """
  8.         ref={}
  9.         
  10.         def dfs(i):
  11.             if i==0: ref[0]=True
  12.             if i in ref: return ref[i]
  13.             ref[i]=False
  14.             for j in range(i):
  15.                 if s[j:i] in wordDict and dfs(j):
  16.                     ref[i]=True                 
  17.             return ref[i]
  18.             
  19.         return dfs(len(s))
复制代码



另一种记忆化递归:
  1. class Solution:
  2.     def __init__(self):
  3.         self.cache=collections.defaultdict()
  4.         self.cache[""]=True
  5.         
  6.     def wordBreak(self, s: str, wordDict: List[str]) -> bool:
  7.         if s in self.cache: return self.cache[s]
  8.       
  9.         for i in range(len(s)):
  10.             if s[:i+1] in wordDict:
  11.                 if self.wordBreak(s[i+1:], wordDict):
  12.                     self.cache[s]=True
  13.                     return True
  14.         self.cache[s]=False
  15.         return False
  16.    
复制代码



求分析两种写法的优缺点。复杂度感觉应该是一样的n^2。个人比较容易理解第二种写法。

谢谢。


上一篇:面试不用动态规划用记忆化递归可不可以?
下一篇:对于mock interview的疑问
您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表