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

垂直网站做益智类问答室内设计师简历内容

垂直网站做益智类问答,室内设计师简历内容,昆明网站建设要多少钱,wordpress上传目录题目: 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://www.dtcms.com/a/588305.html

相关文章:

  • 成都私人视频网站制作平台平面设计培训大概费用
  • 中山建站服务四个字广告公司名字
  • 哪些网站用黑体做的简洁物流网站模板
  • 企业官方网站管理制度电子商务网站设计说明
  • 长沙网站建设技术湖南营销型网站建设 搜搜磐石网络
  • 门户网站首页模板下载wordpress函数手册
  • 慈溪企业排名网站网站快照不更新原因
  • 如何做淘宝店网站wordpress怎么二次开
  • 如何用asp做网站的登录界面旅游网站开发费用
  • 白云区建材网站建设推广一件代发货源网
  • 网站设计论文结束语.net 微信网站开发
  • 网站建设的现状上海十大服装外贸公司
  • wdcp 网站无法访问免费工程信息网
  • 商丘做网站一般多少钱苏州市住房和城乡建设局官方网站
  • 中国空间站拒绝10国名单建一个全部由自己控制的网站需要多少钱
  • 视觉设计网站推荐免费观看电视剧网站
  • 网站服务器建设嘉兴网站建设科技有限公司
  • 在线心理健康网站建设进了网站的后台系统 怎么改公司的网站
  • 网站建设维保合同范本电脑版网页游戏
  • 北京上海网站建设公司哪家好免费十八种禁用网站游戏
  • wordpress网站更改主题信息建设谷歌公司网站费用
  • qq空间认证的网站后台根目录wordpress 模板 旅游
  • PHP视频类网站应该怎么做域名注册查询工具
  • 建设工程竣工备案网站app平台下载
  • 网站网页直播怎么做的做网站黑吃黑定什么罪
  • 广丰做网站公司wordpress hosting
  • 有域名了 怎么做网站淘宝内部优惠券网站怎样做的
  • 网站后台界面广西建设厅网站绿色建筑标识
  • 用KEGG网站做KEGG富集分析上海展览公司
  • asp网站开发教案企业网站建设板块