当前位置: 首页 > wzjs >正文

搭建 网站 模版百度互联网公司邯郸分公司

搭建 网站 模版,百度互联网公司邯郸分公司,做网页怎么做,网上哪些网站可以做设计项目题目: 139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输…

题目:

139. 单词拆分

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。

注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

示例 1:

  • 输入: s = “leetcode”, wordDict = [“leet”, “code”]
  • 输出: true
  • 解释: 返回 true 因为 “leetcode” 可以由 “leet” 和 “code” 拼接成。

示例 2:

  • 输入: s = “applepenapple”, wordDict = [“apple”, “pen”]
  • 输出: true
  • 解释: 返回 true 因为 “applepenapple” 可以由 “apple” “pen” “apple” 拼接成。
  • 注意,你可以重复使用字典中的单词。

示例 3:

  • 输入: s = “catsandog”, wordDict = [“cats”, “dog”, “sand”, “and”, “cat”]
  • 输出: false

思路

既然是动态规划,我们就尝试来找出状态转移方程。

我目前一个简答的想法是:

从前往后找, 一个一个字母的累加到字符串里面, 然后判断这个字符串是否在单词本里面。

我们举个例子,

s = "applenth"
wordDict = ["app" ,"apple", "len", "lenth"]

从第一个字母开始,那就是一个字母组成的一个单词,找找这个单词是否出现在单词本里面。

我们先定义一下 dp 数组,这个 dp 就是用来记录 从头一直到这个位置的子字符串 s[0..i] 是否可以被拆分。

我们分别拆解下面的子串:

  • 首先是 s[0..0] = 'a', ‘a’ 当然不在字典里面,所以 dp[0] = false
  • 然后是 s[0..1] = 'p''ap'不在单词本里面,所以 dp[1] = false
  • s[0..2] = 'p', ‘app单词本里面,所以dp[2] = true
  • s[0..3] = 'l', ‘appl不在单词本里面,所以 dp[3] = false
  • 一直到s[4] = 'e', ‘apple单词本里面,所以 dp[4] = true

我们这个时候可以得到一个表:

i  | s[0..i]     | dp[i]
0  | 'a'         | false
1  | 'ap'        | false
2  | 'app'       | true
3  | 'appl'      | false
4  | 'apple'     | true

那么,再往后其实就能发现一个很有意思的点了:

当到了 s[5] = 'n' 的时候, s[0..5] = 'applen',这个单词可拆分吗?

  • 整体上来看,也就是 ‘applen’ 并不在单词本里,所以 dp[5] = false 吗?
  • 其实我们可以直观的观察到,‘applen’ 也许不在单词本里,但是 ‘app’ + ‘len’ 在单词本里面,那么 dp[5] = true

那么问题就是如果将这个过程数学化呢?

其实也很简单,我们就将 applen 在其尾部,分别去掉单词本里的单词,然后检查,前面的部分是否可拆分,其实就是检查 dp[x] 是否为true。

也就是要满足两个条件:

  • 首先是去掉的部分要是一个单词
  • 其次是前面的部分也要是可拆分。
    满足的话,那么 dp[5] = true

在这个例子中, applen 本身并不是一个单词,但是它是由单词本里的一个单词结尾的,也就是 len

那么我们就可以将 applen 拆分成 app + len,而 app 这个子串本身就是可拆分的(当然在这个简单的例子中,app本身就是一个简单的单词而已)

所以 applen 也是可拆分的。也就是 dp[5] = true

依次类推,我们就可以得到一个完整的 dp 数组。

i  | s[0..i]     | dp[i]
0  | 'a'         | false
1  | 'ap'        | false
2  | 'app'       | true            可以由 'app' 组成
3  | 'appl'      | false
4  | 'apple'     | true            可以由 'apple' 组成
5  | 'applen'    | true            可以由 'app' + 'len' 组成
6  | 'applent'   | false
7  | 'applenth'  | true            可以由 'app' + 'lenth' 组成

当然优化吗,也是完全可以的。我懒得写了。

我想到的一种优化方式是从前往后直接刷新这个数组,而不用去剪掉某个单词之后再次判断。
比如,
dp[2] 是 true的情况下,我们直接判断从 3 往后,能否组成一个单词,能组成的,那么 dp[2 + 这个单词的长度] = true

这样好像能快一点点。

这个就留给大家自己去实现了。

代码:

public class Q0139 {@Testpublic void test() {System.out.println(wordBreak("leetcode", List.of("leet", "code")));System.out.println(wordBreak("applepenapple", List.of("apple", "pen")));System.out.println(wordBreak("catsandog", List.of("cats", "dog", "sand", "and", "cat")));System.out.println(wordBreak("applenth", List.of("app", "apple", "len", "lenth")));}public boolean wordBreak(String s, List<String> wordDict) {int len = s.length();int[] dp = new int[len];for (int i = 0; i < len; i++) {//            System.out.println("i: " + i);// 子字符串String subStr = s.substring(0, i + 1);//            System.out.println("subStr: " + subStr);// 判断从头到这个位置的子字符串是否在单词本里面if (wordDict.contains(subStr)) {dp[i] = 1;continue;}// 如果不在,那么就要判断是否可以拆分// 将subStr分别减去单词本里面的单词,然后判断前面的部分是否可以拆分for (String word : wordDict) {// 这里有个条件是 subStr 以 word 结尾,否则拆分就没有意义if (subStr.endsWith(word)) {// subStr 减去 word 之后的子字符串String subSubStr = subStr.substring(0, subStr.length() - word.length());// 如果前面的部分可以拆分,那么这个部分也可以拆分if (dp[subSubStr.length() - 1] == 1) {dp[i] = 1;break;}}}}return dp[len - 1] == 1;}
}

Over~


文章转载自:

http://aEOmkKiW.tntqr.cn
http://ZI2kYRz9.tntqr.cn
http://ImQL3VLu.tntqr.cn
http://l8u5w6EJ.tntqr.cn
http://1S1GptJE.tntqr.cn
http://74TSwHkM.tntqr.cn
http://VMlvzMz2.tntqr.cn
http://TFW0TwTu.tntqr.cn
http://ISnuvJku.tntqr.cn
http://4DUvfJfi.tntqr.cn
http://c2fgdbHJ.tntqr.cn
http://QInuLcj9.tntqr.cn
http://VKnQa17c.tntqr.cn
http://QQ3foVHA.tntqr.cn
http://e8gHkTVZ.tntqr.cn
http://xLozgmJA.tntqr.cn
http://HLaZGIF6.tntqr.cn
http://5klZiMi1.tntqr.cn
http://SG3AOLCo.tntqr.cn
http://yT8g7cJ4.tntqr.cn
http://MsKaNyau.tntqr.cn
http://CHIDdvo0.tntqr.cn
http://IbyifDsA.tntqr.cn
http://8ci69g9b.tntqr.cn
http://VVr0rBm8.tntqr.cn
http://VOqI4o7m.tntqr.cn
http://E3pylwa7.tntqr.cn
http://n04NEBKr.tntqr.cn
http://jCK382Bj.tntqr.cn
http://rChtjUDC.tntqr.cn
http://www.dtcms.com/wzjs/657296.html

相关文章:

  • 如何做行业平台网站武威建设厅网站
  • 公司定制网站建设公司制作企业网站的目的
  • 怎么做关不掉的网站word 发布到wordpress
  • 网站建设案例典型企业案例合肥网站建设公司排名
  • 学php做网站网上建立网站
  • 房屋装修网站模板wordpress增加用户
  • 长沙有哪些知名网站免费做网站凡科
  • 网站建设前言网站asp设计作品
  • 著名网红公司开业seo优化技术教程
  • 网站建设都包括哪些餐饮设计公司名字
  • 厦门哪里有做网站263企业邮箱报价
  • 常青花园做网站的公司网站开发培训程序员
  • wap php网站源码wordpress列表页面访问时间太长
  • ai写作网站中国最新军事新闻
  • wordpress导入网站外包网
  • 东营建设信息网站做一个网站最低多少钱
  • 广州建站公司有哪些wordpress后台更新等待响应
  • 什么是flash网站网页设计图片素材小插件
  • 怎么做网站计划帮别人做视频剪辑的网站
  • 郑州怎么做网站排名网站网络推广优化
  • 女装网站建设计划书go语言 网站开发
  • 厦门旋挖建筑公司网站深圳网站网络推广公司
  • 站长统计代码酒店网络营销方案ppt
  • 城市建设网站的项目背景深圳互联网公司50强
  • 怎么做系统网站js网站开发工具
  • 佛山网站建设与设计公司轻淘客cms建站教程
  • 网站怎么做支付中国和住房城乡建设部网站
  • 有哪些漫画做的好的网站好电商系统架构图
  • php网站后台制作广东电商网站建设
  • 北京网站制作公司飞沐哔哩哔哩网页版入口2023在线观看