思路是这种。我们从第一个字符開始向后依次找,直到找到一个断句的地方,使得当前获得的子串在dict中,若找到最后都没找到。那么就是False了。

在找到第一个后,接下来找下一个断句处,当然是从第一个断句处的下一个字符開始找连续的子串,可是这时与第一个就稍有不同。比方说word=‘ab’, dict={ 'a', ab', ...},在找到a后,接下来处理的是b。我们发现b不在dict中,可是我们发现b能够和a结合,形成ab,而ab在dict中。所以这里的每一个子串就能够有三种选择。要么自己单独作为个体到dict中找,要么就跟前面的结合起来进行找。要么就是等,等后面的新的字符。构成更长的子串。

可是还有问题,上面我们说的是跟前面的结合起来找。那么这个前面是个什么定义?开头?开头后的第一个? 第二个?所以我们要记录一些信息。来表示前面的子串,是从哪里断开,从而满足条件的。那么我们就能够依次与离当前子串近的部分进行结合。比方:word = ’aab‘, dict = { a, aab }。处理a时。是满足的,下一个a。也是满足的,处理 b 时,b不在dict中,那么就与前面的a结合, 形成 ab,发现不在dict 中,那么继续与前面的结合,形成 aab,发如今dict 中,那么 word 总体就满足条件。

class Solution:# @param s, a string# @param dict, a set of string# @return a booleandef wordBreak(self, s, dict):if len( s ) == 0 or len(dict) == 0:return False#初始长度为0,表示的是之前的元素已经搞定,能够从0開始继续向后dp = [ 0 ]# s串的长度,[1, len ( s )]。我们挨个去搞定兴许的断句for i in range(1, len( s ) + 1):#前面全部的合法的断句处,也就是全部的合法的起始点,由于若前面的都没搞定。不能够继续后面的for j in xrange( len( dp ) - 1, -1, -1):substr = s[dp[j] : i]if substr in dict:dp.append(i)breakreturn dp[-1] == len( s )

转载于:https://www.cnblogs.com/blfbuaa/p/7201900.html

【leetcode】Word Break(python)相关推荐

  1. 【leetcode】sort list(python)

    链表的归并排序 超时的代码 class Solution:def merge(self, head1, head2):if head1 == None:return head2if head2 == ...

  2. 算法之【动态规划】详解(python)

    算法之动态规划详解 定义 动态规划其实是一种运筹学方法,是在多轮决策过程中寻找最优解的方法. 应用场景 动态规划问题的一般形式就是求最值.动态规划其实是运筹学的一种最优化方法,只不过在计算机问题上应用 ...

  3. 【leetcode】Multiply Strings(middle)

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  4. 【leetcode】解题日记(未完待续)

    开坑,有生之年系列,希望有一天能解出 leetcodeleetcodeleetcode 上的所有题目. 写题解好麻烦,懒得写(手动狗头),进度如下,不定期更新. 总题数 已解答 题解数 2058 23 ...

  5. 【LeetCode】动态规划入门(专项打卡21天合集)

    [LeetCode]动态规划入门(专项打卡21天合集) 下图为证 文章目录 [LeetCode]动态规划入门(专项打卡21天合集) Day1 斐波拉契数 第 N 个泰波那契数 Day2 爬楼梯 使用最 ...

  6. 【机器学习】概率神经网络(PNN)的python实现

    [机器学习]概率神经网络(PNN)的python实现 一.概率神经网络原理 1.1.贝叶斯决策 1.2.PNN的网络结构 二.概率神经网路的优点与不足 2.1.优点(参考资料[1]) 2.2.缺点 三 ...

  7. 【机器学习】基于奇异值分解(SVD)的协同过滤推荐算法及python实现

    [机器学习]基于奇异值分解(SVD)的协同过滤推荐算法及python实现 一.协同过滤推荐算法 1.1.协同过滤算法的分类 1.2.相似度的度量 1.3.商品评分的预测 二.奇异值分解(SVD)在协同 ...

  8. 【JDK7】新特性(2) 语法

    2019独角兽企业重金招聘Python工程师标准>>> JDK7对Java语法有少量更新,重点是在易用性和便捷性的改进.     1.二进制字面量 JDK7开始,终于可以用二进制来表 ...

  9. Android自己定义组件系列【6】——进阶实践(3)

    上一篇<Android自己定义组件系列[5]--进阶实践(2)>继续对任老师的<可下拉的PinnedHeaderExpandableListView的实现>进行了分析,这一篇计 ...

最新文章

  1. 2016年日本信息安全市场规模分析
  2. PATH环境变量设置
  3. 使用async await 封装 axios
  4. Java国际化的简单实现方法
  5. Oracle 分类统计sql
  6. activeMQ,spring的jmstemplate简单例子
  7. SparkStreaming找不到reduceByKey的解决方法
  8. 【★】百度网盘背后的真实策略!
  9. c++如何输入数组_工作表数组计算之一:行列数相同的数组间运算
  10. MongoDB聚合运算之mapReduce函数的使用(11)
  11. 纪念第一次用vscode给go语言配置环境踩坑
  12. libcrypto yum 安装_centos7下nginx 报错需要安装 libcrypto.so.10(OPENSSL_1.0.2)(64bit)
  13. 文盲的Python入门日记:第二十八天,封装一个自定义爬虫类,用来执行日常的采集(二)
  14. Salesforce Sales Cloud 零基础学习(四) Chatter
  15. 接口测试二(App抓包)
  16. 【Python】基于机器学习的财务数据分析——识别财务造假
  17. 三种编码器技术详解:各有利弊,如何选择?
  18. 国外如何探路光伏商业化新模式
  19. 2015十大CMS系统介绍
  20. 16信号量(semaphore)

热门文章

  1. 修饰符(public/private/default/protected)
  2. Java平台无关性——跨平台
  3. python 中用什么键缩进 —— tab 还是空格?
  4. PC 机 UART(NS8250)详解
  5. @RequestParam和@RequestBody的区别 (结合 Get/Post )
  6. C++其他进制转十进制
  7. Android 8.0 中如何读取内部和外部存储以及外置SDcard
  8. anasys hpc集群_这可能是最简单的并行方案,如何基于 AWS ParallelCluster 运行 ANSYS Fluent...
  9. 卷积层数据放大_卷积神经网络重要回顾
  10. JZOJ 3813. 【NOIP2014模拟9.7】我要的幸福