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

力扣139.单词拆分

 思路:动态规划,设dp[]记录当前字符能不能通过字典里的单词到达,双层循环,外层循环遍历字符串每一个字符,内层遍历当前i字符之前的所有以i字符结尾的子串

例如字符串:leetcode

i遍历到了t

那么内层循环就会遍历:leet、eet、et、t

然后判断这些子串中有没有与字典里的单词匹配,若匹配且当前dp[j]为真,则dp[i]为真

判断dp[j] 是因为若dp[j]为真,则代表j字符可以到达,那么当前字符子串以j为起始并且字典里存在此子串,所以当前子串的结尾处也可以到达(dp[i] = true)

dp[0] 赋初值true,因为若子串起始字符为第一个字符,那么从第一个字符出发的子串当然是可以的

最后判断dp[]最后一个位置是否为真,若为真则说明此字符串可以通过字典里的单词拼凑到达最后一个字符

一开始的笨办法,虽然笨且慢,不过可能更便于理解:

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {int len = s.size();auto dp = vector<bool> (len + 1);    dp[0] = true;    //dp[0]赋值for(int i = 1; i <= len; i++){     //外层循环遍历字符串int sw = true;    //开关,若内层循环确定当前字符可到达则进行下一个字符for(int j = 0; j < i && sw; j++){    //内层循环遍历i字符前每一个以i字符结尾的子串for(auto word:wordDict){    //在字典里面找有没有此子串if(dp[j] && (word.compare(s.substr(j, i - j)) == 0)){    dp[i] = true;    //如果子串存在可到达则i字符后一个字符也可到达sw = false;    //如果当前字符可到达则无需继续遍历子串}}}}return dp[len];}
};

加入unordered_set之后快了很多

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {int len = s.size();auto dp = vector<bool> (len + 1);dp[0] = true;auto wordset = unordered_set <string> ();for(auto word : wordDict){wordset.insert(word);}for(int i = 1; i <= len; i++){for(int j = 0; j < i; j++){if(dp[j] && wordset.find(s.substr(j, i - j)) != wordset.end()){dp[i] = true;break;}}}return dp[len];}
};

思路不变,unordered_set就是一个key为值的字典,并且unordered_set中find()若找不到对应元素,会返回.end()

相关文章:

  • Redis 笔记
  • Java实现Leetcode题(二叉树-2)
  • 阶段十-分布式-nginx服务器
  • 【C#与Redis】--高级主题--Redis 哨兵
  • 【全局光照GI系统剖析_Enlighten和Progressive Lightmapper_案例分享(附带场景下载链接)_场景】
  • wy的leetcode刷题记录_Day70
  • 配置ssh免密登录
  • Vue学习计划-Vue3--核心语法(一)OptionsAPI、CompositionAPI与setup
  • go 使用 - sync.Metux
  • 计算机网络【Cookie和session机制】
  • 计算机软件考试试题——附答案
  • 使用Vite创建React + TypeScript(node版本为16.17.0,含资源下载)
  • 再见2023,你好2024!
  • Javascript 正则表达式零宽断言
  • 【算法】哈希算法和哈希表
  • .pyc 想到的一些问题
  • AWS实战 - 利用IAM对S3做访问控制
  • canvas 五子棋游戏
  • express + mock 让前后台并行开发
  • HTML中设置input等文本框为不可操作
  • HTTP那些事
  • k8s 面向应用开发者的基础命令
  • LeetCode18.四数之和 JavaScript
  • MQ框架的比较
  • Odoo domain写法及运用
  • socket.io+express实现聊天室的思考(三)
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • supervisor 永不挂掉的进程 安装以及使用
  • TypeScript实现数据结构(一)栈,队列,链表
  • VUE es6技巧写法(持续更新中~~~)
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 如何学习JavaEE,项目又该如何做?
  • 深度学习中的信息论知识详解
  • 微服务框架lagom
  • 微信公众号开发小记——5.python微信红包
  • 做一名精致的JavaScripter 01:JavaScript简介
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #pragma 指令
  • %check_box% in rails :coditions={:has_many , :through}
  • (ibm)Java 语言的 XPath API
  • (ros//EnvironmentVariables)ros环境变量
  • (二)Linux——Linux常用指令
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (力扣题库)跳跃游戏II(c++)
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET delegate 委托 、 Event 事件,接口回调
  • .Net Remoting常用部署结构
  • .net 流——流的类型体系简单介绍
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth