当前位置: 首页 > 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()

http://www.lryc.cn/news/272259.html

相关文章:

  • Docker 镜像命令总汇
  • 客户服务:助力企业抵御经济衰退的关键要素与策略
  • 第八周:AIPM面试准备
  • 阿里云2核2G3M服务器能放几个网站?有限制吗?
  • Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机本身的数据保存(CustomData)功能(C#)
  • 从零开始配置kali2023环境:镜像保存和导入
  • Transformer梳理与总结
  • php之 校验多个时间段是否重复
  • atoi函数的模拟实现
  • 编程笔记 html5cssjs 009 HTML链接
  • Vue实现导出Excel表格,提示“文件已损坏,无法打开”的解决方法
  • 分发糖果,Java经典算法编程实战。
  • 鸿蒙原生应用再添新丁!中国移动 入局鸿蒙
  • 一个人能不能快速搭建一套微服务环境
  • 计算机毕业设计------经贸车协小程序
  • 数据结构OJ实验11-拓扑排序与最短路径
  • 你的第一个JavaScript程序
  • CMake入门教程【基础篇】列表操作(list)
  • 普中STM32-PZ6806L开发板(HAL库函数实现-读取内部温度)
  • 普中STM32-PZ6806L开发板(使用过程中的问题收集)
  • 八股文打卡day12——计算机网络(12)
  • 自然语言处理2——轻松入门情感分析 - Python实战指南
  • pygame学习(一)——pygame库的导包、初始化、窗口的设置、打印文字
  • 前端面试
  • Spring Boot快速搭建一个简易商城项目【完成登录功能且优化】
  • KG+LLM(一)KnowGPT: Black-Box Knowledge Injection for Large Language Models
  • 使用anaconda创建爬虫spyder工程
  • 网络通信(7)-TCP协议解析
  • win32 WM_MENUSELECT消息学习
  • Java学习苦旅(十六)——List