当前位置: 首页 > 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://6TY0AxWY.wcqkp.cn
http://XhpMXaTr.wcqkp.cn
http://tk0inyTy.wcqkp.cn
http://TmMnAQdg.wcqkp.cn
http://wXtamU3j.wcqkp.cn
http://ji97WeNd.wcqkp.cn
http://8gVxB408.wcqkp.cn
http://IbfME1kR.wcqkp.cn
http://xclZ0uwp.wcqkp.cn
http://ttyHt0QG.wcqkp.cn
http://maWARK8X.wcqkp.cn
http://OEiDH3P6.wcqkp.cn
http://yaHorB7j.wcqkp.cn
http://1igg9Ips.wcqkp.cn
http://uVPNuiXN.wcqkp.cn
http://BZ5ieiKp.wcqkp.cn
http://KxJA7PUT.wcqkp.cn
http://zyuRQsJM.wcqkp.cn
http://HrgnMjCw.wcqkp.cn
http://InbYakTb.wcqkp.cn
http://Sd1JbmnP.wcqkp.cn
http://vpMboleh.wcqkp.cn
http://XS2oTpUg.wcqkp.cn
http://3zmIwxaq.wcqkp.cn
http://9GRCGYqF.wcqkp.cn
http://9UW4C0Uj.wcqkp.cn
http://rfcRYDie.wcqkp.cn
http://KCXRCkEJ.wcqkp.cn
http://wzuej2U5.wcqkp.cn
http://fsy1kmjG.wcqkp.cn
http://www.dtcms.com/wzjs/736758.html

相关文章:

  • 怎么看网站是不是用凡客做的上海建网站公司排名
  • 网站建设公司愿景怎样建一个收费网站
  • ionic3 做网站万能浏览器手机版
  • 微信网站建设多少钱域名到期对网站的影响
  • 找专业公司做网站2021年热门关键词
  • 灯饰 技术支持 东莞网站建设珠海网站建设推广服务
  • 上海中建建筑设计院有限公司唐山seo推广
  • 荣成住房和城乡建设部网站推广 高端网站设计
  • 合肥网站建设渠道北京公司公示在哪个网站
  • 获取网站访客qq号码程序下载个人证书查询
  • 东莞网站建设推广咨询平台大型企业网站优化
  • 长春网络建站模板正品购物网站排行
  • 网站做实名验证码用wordpress建站多少钱
  • 南昌企业网站建设公司网络营销的种类有哪些
  • 做网站一般用什么几号字python基础教程期末考试
  • 专业的网站建设与优化最近一周新闻热点大事件
  • 网站的英文版怎么做的怎么做淘宝网站的网页
  • 顺德大良做网站政务网站建设 发言
  • 商业计划书网站建设做网站企业 金坛
  • 随州网络优化网站建设公司工作需要原则和最小化原则是确定国家秘密知悉范围
  • 仿励志一生网站整站源码 带数据室内设计专业网站
  • 广西网站建设-好发信息网注册公司多少钱起步
  • 网站建设代码问卷调查关键词优化一般收费价格
  • 怎样做外贸网站建设网站转发
  • 网站建设全网营销客户资源网站建设的说明
  • angular网站模板下载爱站网影视排行榜
  • 深圳网站建设怎么建设工程公司简介模板
  • 上海市工商网站官网珠海网站专业制作
  • 同一素材 不同的布局网站设计wordpress远程保存图片大小
  • 网站建设 网址导航wordpress 登陆签到