题目

https://leetcode.com/problems/word-break/

题解

时隔一天,再次遇到 dp 问题…
本题和 leetcode 375. Guess Number Higher or Lower II | 375. 猜数字大小 II(动态规划思路总结)的思路是一样的,连 dp 数组的遍历方向都是一样的(斜向)…
这是全局第 5 道没看答案的 dp 问题,所以,dp 到底是不是玄学?…

以下面的测试用例为例,斜向依次填充 dp 数组过程如图所示。

public static void main(String[] args) {Solution solution = new Solution();List<String> list = new ArrayList<>();list.add("cat");list.add("cats");list.add("and");list.add("sand");list.add("dog");list.add("catsanddog");solution.wordBreak("catsanddog", list);
}

class Solution {public boolean wordBreak(String s, List<String> wordDict) {HashSet<String> dict = new HashSet<>();for (String word : wordDict) {dict.add(word);}int n = s.length();boolean[][] dp = new boolean[n + 1][n + 1];for (int i = 1; i <= n; i++) {for (int j = i; j <= n; j++) {int L = j - i;int R = j;if (dict.contains(s.substring(L, R))) {dp[L][R] = true;} else {for (int M = L + 1; M < R; M++) {// [L...M) + [M...R)if (dp[L][M] & dp[M][R]) {dp[L][R] = true;break;}}}}}return dp[0][n];}
}

leetcode 139. Word Break | 139. 单词拆分(动态规划)相关推荐

  1. leetcode 140. Word Break II | 140. 单词拆分 II(动态规划)

    题目 https://leetcode.com/problems/word-break-ii/ 题解 由 leetcode 139. Word Break | 139. 单词拆分(动态规划) 改造而来 ...

  2. 【记忆化递归+DP】LeetCode 139. Word Break

    LeetCode 139. Word Break Solution1: 记忆化递归的典型套路题 参考网址:https://zxi.mytechroad.com/blog/leetcode/leetco ...

  3. 【DFS + 记忆化递归】LeetCode 140. Word Break II

    LeetCode 140. Word Break II Solution1:我的答案 纯DFS,在第31个case时超时,还是记录一下.. class Solution { // DFS public ...

  4. 139. Word Break 单词拆分

    Title 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字 ...

  5. LeetCode 139. 单词拆分(动态规划)

    题目描述 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字典 ...

  6. 101. Leetcode 139. 单词拆分 (动态规划-完全背包)

    步骤一.确定状态: 确定dp数组及下标含义 dp[j]表示的是长度为j的字符串(容量为j的背包)能否被拆分成1个或者多个单词 里面的值, 所以这里的dp[j]非1即0 步骤二.推断状态方程: if d ...

  7. 139. Word Break

    一.题目 1.审题 2.分析 给出一个字符串 S,一个字典表 dict,判断 S 是否能由 dict 中的字符串所组成,其中 dict 中的字符串能够多次使用. 二.解答 1.思路: 方法一. 使用一 ...

  8. LeetCode 79 Word Search(单词查找)

    题目链接:https://leetcode.com/problems/word-search/#/description 给出一个二维字符表,并给出一个String类型的单词,查找该单词是否出现在该二 ...

  9. leetcode 343. Integer Break | 343. 整数拆分(Java)

    题目 https://leetcode.com/problems/integer-break/ 题解 一开始以为,只要是 3 个数相加就可以,于是在错误的方向上越走越远: 后来发现并不只是 3 个数, ...

最新文章

  1. Java线程池实现原理及其在美团业务中的实践
  2. C++ TypeId简介与使用
  3. 剑指offer-用两个栈实现一个队列
  4. 别不信!servlet获取到的参数值,也许完全出乎你的意料!
  5. Python 持续点火,跟进还是观望?
  6. java websocket
  7. TortoiseSVN 命令 (命令行执行工具)
  8. Jmeter-阶梯场景设置
  9. 线程池和任务工厂实现多线程异步运行
  10. libxml主要函数说明 (一)
  11. git version可以卸载吗_「玩转Git命令」作为代码奴,该安装Git啦
  12. 音乐播放器代码和网页播放器代码
  13. Ant Design Pro从零到一(页面创建)
  14. matlab 2014b 图像,使用Matlab 2014b的锯齿状轮廓
  15. 计算机乱七八糟小知识备忘录
  16. js基础面试题整理(包含ES5,ES6)
  17. springmvc(四) springmvc的数据校验的实现
  18. Virgo与Maven整合开发环境搭建(二)
  19. 读写文本文件-StreamReader和StreamWriter
  20. 数字信号处理中的声学基础知识

热门文章

  1. 洛谷 - P3356 火星探险问题(最大费用最大流+拆点+路径打印)
  2. 洛谷 - P1725 琪露诺(动态规划+单调队列优化)
  3. HDU - 6393 Traffic Network in Numazu(线段树+LCA+树链剖分+并查集)
  4. HDU - 3533 Escape(预处理+A*)
  5. 南通工学院计算机97级,2021年南通理工学院录取结果查询网址入口及录取结果公布时间...
  6. POJ1151(线段树+扫描线求矩形面积并)
  7. 梅朵是藏语鲜花的意思
  8. 像加载DLL一样加载EXE
  9. mov eax,dword ptr fs:[0] 指令
  10. 网络编程释疑之:单台服务器上的并发TCP连接数可以有多少