Leetcode每日刷题之30.串联所有单词的子串

embedded/2024/10/18 2:18:57/

1.题目解析

本题的题目要求给出一个字符串 s 与一个字符数组 words ,并且 words 中的所有单词长度均相同,我们要寻找出 s 中是否存在子串符合 words 中单词的任意组合而成,注意重要的一点是 words 中的所有单词的长度均相同,这是解决问题的重要一点

2.算法原理

这里我们要把握的一个点就是words中的所有单词均是长度相同的单词,根据我们上一道题438.找到字符串中所有字符异位词 ,与这道题的思路大同小异,不过本题将元素变成了独立的每个单词,这时我们可以使用"滑动窗口",将left与right初始均指向s的开头,然后right一次性移动的长度是words中每个单词的长度,并且进行该操作的次数同样是单词的长度,然后使用哈希表来统计窗口与字符串数组中的单词个数,记录窗口内有效元素的个数,在进窗口后检查有效元素的个数,同样出窗口也要检查,最终判断有效个数是否为字符串数组中的单词个数,如果是就直接返回left对应的下标,反之继续进入循环遍历,最终返回数组即可

 

3.代码展示

class Solution {
public:vector<int> findSubstring(string s, vector<string>& words) {vector<int> ret;unordered_map<string,int> hash1;//保存 words 中的单词数目int len = words[0].size();//保存 words 中单词长度int m = words.size();//保存 words 中单词个数for(auto& s : words){ hash1[s]++;}for(int i = 0;i < len;i++){unordered_map<string,int> hash2;for(int left = i,right = i,count = 0;right + len <= s.size();right += len){//进窗口 + 维护 countstring in = s.substr(right,len);hash2[in]++;if(hash1.count(in) && hash2[in] <= hash1[in]){count++;}//判断if(right - left + 1 > len * m){//出窗口 + 维护 countstring out = s.substr(left,len);if(hash1.count(out) && hash2[out] <= hash1[out]){count--;}hash2[out]--;left += len;}//更新结果if(count == m){ret.push_back(left);}}}return ret;}
};

 


http://www.ppmy.cn/embedded/105499.html

相关文章

TCP 拥塞控制

概念详解 TCP拥塞控制是网络通信中的一个关键机制&#xff0c;它通过动态调整发送数据的速率来避免网络拥塞。以下是TCP拥塞控制的详细概念解释&#xff1a; 拥塞窗口&#xff08;CWND, Congestion Window&#xff09;: 定义&#xff1a;发送方在收到接收方的确认&#xff08;…

【苍穹外卖】Day 5 Redis、店铺营业状态接口

1 基本介绍 Redis是一个基于 内存 的 key-value 结构数据库 基于内存存储&#xff0c;读写性能高适合存储热点数据(热点商品、资讯、新闻)企业应用广泛 运行 在cmd下 redis-server.exe redis.windows.conf 启动状态下&#xff0c;再 redis-cli.exe 测试&#xff1a; 也可以…

24最新『ComfyUI』入门到入坟全套教程!!看到就是赚到!赶紧收藏!

前言 本文简介 Stable Diffusion WebUI 应该是大多数人第一次接触 SD 绘画的工具&#xff0c;这款工具简单易上手&#xff0c;但操作流程相对固定。如果你想拥有更自由的工作流&#xff0c;可以试试 ComfyUI。而且很多新的模型和功能在刚出现时 ComfyUI 的支持度都比较高&…

机器学习(五) -- 监督学习(8) --神经网络2

机器学习系列文章目录及序言深度学习系列文章目录及序言 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;8&#xff09; --神经网络1 下篇&#xff1a; 前言 tips&#xff1a;标题前有“***”的内容为补充内容&#xff0c;是给好奇心重的宝宝看…

探索前沿科技:在本地系统上安装和使用Style TTS2进行高质量语音合成

我们正处于一个令人激动的时代&#xff0c;有如此多的选择&#xff0c;不仅在大型语言模型方面&#xff0c;还有现在的文本到语音&#xff08;TTS&#xff09;模型。在这篇文章中&#xff0c;我将向您展示如何在本地系统上轻松安装这个非常出色的模型——Style TTS2&#xff0c…

libvncclient编写多线程qt的VNC客户端

概述 使用qt和libvncclient编写vnc的客户端程序&#xff0c;多线程读写&#xff0c;拒绝卡顿。qt环境&#xff1a;5.15.3libvncclient&#xff1a;0.9.14下载地址&#xff1a;https://github.com/LibVNC/libvncserver/releases 编译libvncclient 打开CMakeList文件&#xff…

爬取图片保存为pdf

本文章想借着爬虫给大家介绍一下图片转pdf,有需要的友友们可以看看参考参考&#xff0c;有帮助到友友的可以收藏&#xff0b;关注。下面以爬取初中7年级数学上册为例给大家演示一下。网址是这个 https://mp.weixin.qq.com/s?__bizMzAxOTE4NjI1Mw&mid2650214000&idx…

20240903软考架构-------软考111-115答案解析

每日打卡题111-115答案 111、【2016年真题】 难度&#xff1a;一般 实时操作系统&#xff08;RTOS&#xff09;内核与应用程序之间的接口称为&#xff08; &#xff09;。 A&#xff0e;I&#xff0f;O接口 B&#xff0e;PCI C&#xff0e;API D&#xff0e;GUI 答案&#xff…