【算法】滑动窗口——串联所有单词的子串

今天来以“滑动窗口”的思想来详解一道比较困难的题目——串联所有单词的子串,有需要借鉴即可。

目录

  • 1.题目
  • 2.下面是示例代码
  • 3.总结

1.题目

题目链接:LINK
在这里插入图片描述
这道题如果把每个字符串看成一个字母,就是另外一道中等难度的题目,即,找到字符串中所有字母异位词:LINK

所以说白了,就是把每个字符串来当作一个字母进行处理,当然这仅仅是思想,相比于异位词这个题来说,现在这道比较困难的题目还有以下不同的区别需要注意:

  • ①哈希表不同
  • ②left,right的起始位置,赋值不同
  • ③滑动窗口的执行次数

2.下面是示例代码

class Solution {
public:vector<int> findSubstring(string s, vector<string>& words) {vector<int> ret;unordered_map<string,int> hash_w;for(int i = 0; i < words.size(); i++){string str = words[i];hash_w[str]++;}for(int i = 0; i < words[0].size(); i++){unordered_map<string,int> hash_s;for(int left = i, right = i,count = 0; right + words[0].size() <= s.size(); right+=words[0].size()){//进窗口string in = s.substr(right,words[0].size());//取子串hash_s[in]++;if(hash_w.count(in) && hash_s[in] <= hash_w[in])count++;//判断if(right - left + 1 > words[0].size() * words.size()){//出窗口string out = s.substr(left,words[0].size());if(hash_w.count(out) && hash_s[out] <= hash_w[out])count--;//这个地方需要注意要在--之前进行判断hash_s[out]--;left+=words[0].size();}//更新结果if(count == words.size())ret.push_back(left);}}return ret;}
};

3.总结

  • 一、经验
    这道题如果有“找到字符串中所有字母异位词”这道题的经验,说实在的不难,但前提是得有这个思想,没做过“找到字符串中所有字母异位词”这道题直接做这个的比较困难的题目的话会很难受。

  • 二、再就是语法上:

    • ①是对容器的基本语法要有点了解,知道会用一些基本的接口。
    • ②是我上面这个代码其实还做了一点点语法优化
      就是在判断count是否++或者–时候那个条件,即:if(hash_w.count(in) && hash_s[in] <= hash_w[in])count++;如果hash_w[in]不存在他会创建一个in,有点消耗时间

EOF

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

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

相关文章

对象,字符串的解构赋值

大家想了解更多&#xff0c;可以去看阮一峰的ECMAScript6(ES6)标准入门课程 对象 简介 解构不仅可以用于数组&#xff0c;还可以用于对象。 let { foo, bar } { foo: aaa, bar: bbb }; foo // "aaa" bar // "bbb" 对象的解构与数组有一个重要的不同。…

[CAM_REQ_MGR_EVENT_MAX]高通6225平台相机老化异常重启

报错log 相机老化出现20/7万比例的老化异常重启&#xff0c;具体报错log入下 <4>[ 167.506585] [1970:01:02 18:52:26](0) [0:swapper/0]cam_v4l2_event_queue_notify_error: 251 callbacks suppressed 7 3339<6>[ 167.506602] [1970:01:02 18:52:26](0) [0:swap…

面试试题一

封装&#xff08;Encapsulation&#xff09; 面试问题&#xff1a; 封装在面向对象编程中扮演什么角色&#xff1f;如何在Java中实现封装&#xff1f;有哪些最佳实践可以帮助提高类的封装性&#xff1f; 详细答案&#xff1a; 封装的角色&#xff1a; 封装是面向对象编程的核…

CMake 的继承关系

1. CMake如何确定继承关系 在 CMake 中&#xff0c;父子关系是通过文件系统中的目录结构来定义的。当你在一个目录中创建一个 CMakeLists.txt 文件时&#xff0c;该目录就被视为一个 CMake 项目的目录&#xff0c;而该文件中的内容将被用于配置和构建该目录中的项目。 当你在父…

不同路径| 和 不同路径||

不同路径| 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xf…

Tomcat启动闪退问题解决办法

本文将通过一系列诊断步骤帮助您找出原因&#xff0c;并提供相应的解决办法。 诊断步骤 查看日志文件 Tomcat的日志文件是解决启动问题的第一线工具。查看logs目录下的catalina.out和其他日志文件&#xff0c;这些文件经常记录了错误信息和系统崩溃的线索。 cat /path/to/to…

C++编程与朱元墇的关系

学编程和英语没关系&#xff0c;我说这句话&#xff0c;没人会相信&#xff0c;也不会有人说我什么哗众取宠。 我说学编程和朱元墇有关系&#xff0c;一定有人说我放P&#xff0c;其实这个P也和朱元墇有关系&#xff0c; 和朱元墇有什么P关系啊。 真有这P事啊&#xff0c; 朱元…

LeetCode刷题笔记之图论

1. 797【所有可能的路径】 题目&#xff1a; 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09;。graph[i] 是一个从节点 i 可以访问的所有节点的列表&#xf…

大学生体质测试|基于Springboot+vue的大学生体质测试管理系统设计与实现(源码+数据库+文档)

大学生体质测试管理系统 目录 基于Springboot&#xff0b;vue的大学生体质测试管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 4教师功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算…

MySQL数据库基础功能

MySQL是一种常用的关系型数据库管理系统&#xff0c;它广泛应用于网站开发、数据分析和其他许多领域。 咋可以不专业搞这个&#xff0c;但是基础的最好能看懂和应用&#xff0c;快去学习吧 下面是10个不同案例&#xff0c;展示MySQL的用法。 ①创建数据库&#xff1a;使用CR…

C++笔试强训day20

目录 1.经此一役小红所向无敌 2.连续子数组最大和 3.非对称之美 1.经此一役小红所向无敌 链接 简单模拟即可。 需要注意的是&#xff1a; 除完之后有无余数&#xff0c;若有&#xff0c;则还可以再挨一次打。 #include <iostream> using namespace std; #define in…

设计模式——结构型模式——代理模式(静态代理、动态代理:JDK、CGLIB)

目录 代理模式 代理模式简介 代理模式的分类 代理模式组成 代理模式的优缺点 静态代理 背景前置 编写代码 JDK动态代理 编写代码 使用Arthas分析JDK动态代理底层原理 CGLIB动态代理 编写代码 三种代理的对比 代理模式使用场景 代理模式 代理模式简介 代理模式属…

Mybatis操作数据库的两种方式:Mapper代理模式

1.Mapper代理模式的特点 程序员没有写接口的子实现——直接获取数据库的数据 因为Mybatis定义了一套规则&#xff0c;对方法进行了实现&#xff0c;程序员只要遵循这套方法就可以直接使用 2.如何实现Mapper代理模式 步骤&#xff1a; 1.创建一个dao接口&#xff0c;在接口…

java项目之英语知识应用网站源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的英语知识应用网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 英语知识应用网站的主要…

【免费】AME最新Adobe Media Encoder电脑软件安装包2024-2018支持WIN和MAC

Adobe MediaEncoder「Me」2024是一款功能强大的转码和媒体处理软件&#xff0c;它不仅能轻松应对各种媒体文件的编码和导出需求&#xff0c;还支持多种视频格式和分辨率&#xff0c;让你的视频处理变得更加高效。此外&#xff0c;该软件界面简洁明了&#xff0c;操作简便&#…

【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”

看到这句话的时候证明&#xff1a;此刻你我都在努力~ 加油陌生人~ 个人主页&#xff1a; Gu Gu Study ​​ 专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努…

【Element-UI快速入门】

文章目录 **Element-UI快速入门****一、Element-UI简介****二、安装Element-UI****三、引入Element-UI****四、使用Element-UI组件****五、自定义Element-UI组件样式****六、Element-UI布局组件****七、Element-UI表单组件****八、插槽&#xff08;Slots&#xff09;和主题定制…

【数据结构】排序(一)—— 希尔排序(思路演进版)

目录 一、常见的排序算法分类 二、常见排序算法的实现 2.1插入排序 2.1.1基本思想 2.1.2直接插入排序 思路 step1.单趟控制 step2.总体控制 代码实现 测试 特性总结 2.1.3 希尔排序( 缩小增量排序 ) 基本思想 思路演进 &#x1f308;1.代码实现单组排序&#…

你能坚持二十年如一日地积极试错吗?

你能坚持二十年如一日地积极试错吗&#xff1f;先说一个大家都耳熟能详的人物&#xff1a;克里斯托弗哥伦布&#xff0c;他被称为新大陆的发现者&#xff0c;是具有极高历史地位的伟大航海家。 但是新大陆本来就不是所谓的“新”大陆&#xff0c;而是在4万年前从白令海峡迁徙过…

端午节线上活动方案怎么写?

一年一端午&#xff0c;一岁一安康。 如果您想组织端午活动&#xff0c;却不知道如何安排&#xff0c;可以看看何策网&#xff0c;有很多案例参考&#xff0c;仿造模板修改即可。 下面分享一个线上端午节活动策划方案&#xff0c;希望能帮到你&#xff01; 端午节作为祭祖祈…