8.15 哈希表中等 139 Word Break review 467 Unique Substrings in Wraparound String

139 Word Break【逐一对比vs.多种 分割 组合】

在这里插入图片描述
在这里插入图片描述

片面思考的思路:

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {//字符串和对应的字典,如果s种可以用空格分隔出一个或多个字典里的词就返回true//核心:按照字典里的词对s断句,对s遍历,如何判断s种有多余的字母是字典中不包含的?//细节:字典里的词会被多次使用,且不按顺序出//在这道题中,哈希表是怎么使用的?是存储字典中出现的单词个数?还是存储s中的单词出现的位置?//如何确定单词范围?对dic也是一个一个比较吗?比较后怎么锁定s中的位置?//单词范围由wordDic[i].size()确定,通过substr(pos,len)确定子串中的位置,哈希表用于存储开始位置和单词长度//是哪个循环套哪个循环?//因为一个字典会在s中多次出现且s的长度最大值才300所以Dic中嵌套s//如何让s遍历的时候跳过已经判断出的范围?或者说如何判定s没有被排除完?//s.replace(pos,len,'0')那这样就不需要哈希表了啊,直接最后遍历一遍是否全为0就好了//unordered_map<int,int> StartAndLength;int index = 0;for(int i = 0 ; i < wordDict.size();i++){int len = wordDict[i].size();int index = 0;//每次都从头开始遍历while(index < s.size()){if(s[index] == wordDict[i][0] && s.substr(index,len) == wordDict[i]){//StartAndLength[index] = len;s.replace(index,len,string(len,' '));index+=len;}else{index++;}}}for(char ch : s){if(ch != ' '){return false;}}return true;}
};

分析思路过程:

按照字典里的词对s断句,对s遍历,如何判断s种有多余的字母是字典中不包含的?
细节:字典里的词会被多次使用,且不按顺序出
在这道题中,哈希表是怎么使用的? 是存储字典中出现的单词个数?还是存储s中的单词出现的位置?-----》都是对中间态的记录,没有考虑哈希表的快速查找
如何确定单词范围? 对dic也是一个一个比较吗?比较后怎么锁定s中的位置?
单词范围由wordDic[i].size()确定,通过substr(pos,len)确定子串中的位置,哈希表用于存储开始位置和单词长度-------》没有考虑多种组合的情况
//是哪个循环套哪个循环?
//因为一个字典会在s中多次出现且s的长度最大值才300所以Dic中嵌套s

如何让s遍历的时候跳过已经判断出的范围?或者说如何判定s没有被排除完?
完全遍历一遍,所以主体还是对s的遍历

在这里插入图片描述

在这里插入图片描述

重新思考这道题目

按照难度来说,中等题也不太可能使用逐一对比+替换就能解决这个问题;
按照题型来说,这道题肯定需要用哈希表来解决
重新思考这道题,复盘哪些问题需要继续去思考的:

  • 在这道题中,哈希表是怎么使用的?
  • 如何确定单词范围?
  • 如何判断s中有多余的字母是字典中不包含的?---->这个是多种组合?

第一个问题: 哈希表可以完成字典的快速查找unordered_set,记录中间状态 unordered_map;
如果是前一种,也就是将wordDict变了一下,用于快速查找s子串种是否是字典中的单词hash.find(s.substr(pos,len)) != hash.end()就是查到了,这段子串是存在于hash中的。
【这种方式特别适合需要频繁查找字典的情况,因为 unordered_set 的查找操作具有平均 O(1) 的时间复杂度,非常高效。】
后一种的话,就是用哈希表记录检查过的字符串段,用于判断s已经被分割的字段,但这个不适合多种组合的情况,类似于逐一对比,认准一个死理不改变,所以还是使用字典的快速查找。
第二个问题: 单词范围一种是遍历,确定s中的开始位置使用while和Dict中的单词逐一对比,已经被pass了;另一种是动态规划,动态规划尤其适用于需要检查多个可能分割点并且组合的情况,如字符串分割、路径问题等。
第三个问题: 实际上是回答怎么判定s是否可以被Dict中的单词们分割,结合第二个问题,使用动态规划划分单词范围,其中的dp[i]数组表示的是s中前i个字符是否可以被完全分割,如果在最终的dp数组中s.size()位置标记为false则表示无法分割。

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {//动态规划//要做的事情是确定s中前i位是否可以被分割 dp[i]vector<bool> dp(s.size()+1,false);unordered_set<string> wordSet(wordDict.begin() , wordDict.end());//初始条件dp[0] = true;dp[0] = true;//遍历string s找合适的切割组合for(int i = 1 ; i <= s.size() ; i++){//判定是否可以被分割for(int j = 0 ; j < i ; j++){//判定条件,关系式:wordSet.find(s.substr(j , i-j)) != wordSet.end()if(dp[j] && wordSet.find(s.substr(j , i-j)) != wordSet.end()){//可以被分割dp[i] = true;break;}}}return dp[s.size()];}
};

review 467 Unique Substrings in Wraparound String

在这里插入图片描述在这里插入图片描述

class Solution {
public:int findSubstringInWraproundString(string s) {//不同的非空的子串数目 不同+非空怎么判定-->记录数组dp 仅记录以26字母为结尾的//要找的是 且是不同的 存在于base中的子串 所以判定dp[i]为以i = ch - 'a'为索引,以ch为结尾的最长子串vector<int> dp(26,0);int maxLen = 0;//base的判定前者-后者为1 或者前者为z后者为a,记录长度for(int i = 0 ; i < s.size() ; i++){char ch = s[i];if(i>0 && (s[i] - s[i-1] == 1 || (s[i-1] == 'z' && s[i] == 'a'))){maxLen++;}else{//初始条件maxLen = 1;}dp[ch-'a'] = std::max(maxLen,dp[ch-'a']);}int ans = 0;for(int len : dp){ans += len;}return ans;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/401375.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows 安装TVM

TVM支持在Windows环境下使用&#xff0c;但需要一些额外的配置。以下是如何在Windows Python环境中安装TVM的详细步骤。 1. 安装TVM的预备条件 在Windows上安装TVM之前&#xff0c;需要确保系统已经安装了以下工具和依赖项&#xff1a; Visual Studio: 安装包含C开发工具的V…

利用ZXing.Net Bindings for EmguCV识别条形码及绘制条形码边框17(C#)

上一篇博文&#xff1a;绘制条形码的效果不是很好&#xff1a;利用Emgucv绘制条形码边框16(C#)-CSDN博客 测试环境&#xff1a; win11 64位操作系统 visual studio 2022 ZXing.Net.Bindings.EmguCV 0.16.4 测试步骤如下&#xff1a; 1 新建.net framework 4.8的控制台项目…

Linux日常运维-主机名hosts

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 本小章内容就是Linux进阶部分的日常运维部分&#xff0c;掌握这些日常运维技巧或者方法在我们的日常运维过程中会带来很多方…

【Vue3】嵌套路由

【Vue3】嵌套路由 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。本文内…

【Linux】缓冲区和文件系统

目录 一、缓冲区 1.1 概念 1.2 用户缓冲区和内核缓冲区 二、磁盘的结构 三、文件系统 3.1 初识“块”和inode 3.2 磁盘分区和文件系统 一、缓冲区 1.1 概念 要理解什么是缓冲区&#xff0c;先看这段代码 #include <stdio.h> #include <string.h> #includ…

Linux系统驱动(十八)SPI总线(未整理)

文章目录 一、SPI总线协议简介二、SPI子系统驱动&#xff08;二&#xff09;SPI子系统API&#xff08;三&#xff09;SPI设备树节点 三、代码示例 一、SPI总线协议简介 高速、同步、全双工、非差分、总线式 传输速度在几十M 差分总线和非差分总线 非差分总线&#xff1a;受压…

江协科技STM32学习笔记(第13章 WDG看门狗)

第13章 WDG看门狗 13.1 WDG看门狗 13.1.1 WDG简介 看门狗就是程序运行的一个保障措施&#xff0c;我们得在程序中定期地喂狗&#xff0c;如果程序卡死了&#xff0c;没有在规定的时间里喂狗&#xff0c;那么看门狗硬件电路就会自动帮我们复位一下&#xff0c;防止程序长时间…

最新爆火文生图模型FLUX

在AI图片生成领域&#xff0c;Flux模型的推出引起了广泛关注。随着AI技术的不断进步&#xff0c;新的模型层出不穷&#xff0c;而Flux正是其中的一颗新星。 Flux&#xff1a;一款迅速走红的AI图片生成模型 8月初&#xff0c;初创公司Black Forest Labs推出了文本生成图像模型…

米联客-FPGA程序设计Verilog语法入门篇连载-10 Verilog语法_一般设计规范

软件版本&#xff1a;无 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用所有系列FPGA 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑&#xff01; 1概述 本小节讲解Verilog语法的一般…

合并两个有序数组(LeetCode)

题目 给你两个按 非递减顺序 排列的整数数组 和 &#xff0c;另有两个整数 和 &#xff0c;分别表示 和 中的元素数目。请你 合并 到 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#xff0c;合并后数组不应由函数返回&#xff0c;而是…

Docker最佳实践进阶(一):Dockerfile介绍使用

大家好&#xff0c;上一个系列我们使用docker安装了一系列的基础服务&#xff0c;但在实际开发过程中这样一个个的安装以及繁杂命令不仅仅浪费时间&#xff0c;更是容易遗忘&#xff0c;下面我们进行Docker的进阶教程&#xff0c;帮助我们更快速的部署和演示项目。 一、什么是…

【初阶数据结构】通讯录项目(可用作课程设计)

文章目录 概述1. 通讯录的效果2. SeqList.h3. Contact.h4. SeqList.c5. Contact.c6. test.c 概述 通讯录项目是基于顺序表这个数据结构来实现的。如果说数组是苍蝇小馆&#xff0c;顺序表是米其林的话&#xff0c;那么通讯录就是国宴。 换句话说&#xff0c;通讯录就是顺序表…

个人可识别信息(PII) AI 去除 API 数据接口

个人可识别信息(PII) AI 去除 API 数据接口 ai / 隐私保护 基于 AI 模型自动去除个人识别信息&#xff08;PII&#xff09; 个人信息保护 / AI 模型 。 1. 产品功能 基于自有专业模型进行 PII 自动去除高效处理敏感信息全接口支持 HTTPS&#xff08;TLS v1.0 / v1.1 / v1.2 /…

【剑指 offer】镜像二叉树

目 录 描述&#xff1a; 操作给定的二叉树&#xff0c;将其变换为源二叉树的镜像 思路&#xff1a; 仔细观察可以发现&#xff0c;所谓的二叉树镜像本质是自顶向下(or自底向上)进行左右子树交换的过程 public class Solution {public void Mirror(TreeNode root) {if(root nu…

音视频开发继续学习

RGA模块 RGA模块定义 RGA模块是RV1126用于2D图像的裁剪、缩放、旋转、镜像、图片叠加等格式转换的模块。比方说&#xff1a;要把一个原分辨率1920 * 1080的视频压缩成1280 * 720的视频&#xff0c;此时就要用到RGA模块了。 RGA模块结构体定义 RGA区域属性结构体 imgType&am…

LeetCode-3148. 矩阵中的最大得分

本人算法萌新,为秋招找工作开始磨炼算法,算法题均用python实现,如果我有哪些地方做的有问题的,还请大家不吝赐教. 1.题干 给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格&#xff08;不必相邻&…

提高办公效率,四款语音转文字工具推荐!

无论是在会议记录、采访速记还是日常笔记中&#xff0c;语音转文字技术都展现出了其独特的价值。接下来是就为大家推荐几款市面上广受好评的语音转文字工具&#xff01; 365在线转文字 链接&#xff1a;https://www.pdf365.cn/ 365在线转文字是一款非常实用的在线语音转文字…

【Unity/网络】Unity和内网穿透的网络测试 —— 以聊天室为例

这两天在做那个CodeMonky的胡闹厨房的案例&#xff0c;一直困扰我的是关于Lobby和Relay的相关网络服务&#xff0c;需要挂加速器并且延迟不低&#xff0c;所以我一直在寻找一些其他替代方案&#xff0c;想起来之前做一个UEC的网络枪战时做过一个内网穿透的方法&#xff0c;所以…

机械行业数字化生产供应链产品解决方案(十二)

我们为机械行业提供的数字化生产供应链解决方案通过集成物联网、人工智能和大数据技术&#xff0c;打造了一套智能化的生产和供应链管理系统&#xff0c;实现了从设计、生产到物流的全程数字化、智能化。该系统通过实时数据采集与分析&#xff0c;优化生产计划和资源配置&#…

前后端分离项目实战-通用管理系统搭建(前端Vue3+ElementPlus,后端Springboot+Mysql+Redis)第二篇:项目登录功能的实现

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…