算法:30.串联所有单词的子串

devtools/2024/9/20 3:04:39/ 标签: 算法, c++

题目

链接:leetcode链接
在这里插入图片描述

思路分析(滑动窗口)

这道题目类似寻找异位词的题目,我认为是寻找异位词的升级版
传送门:寻找异位词

为什么说像呢?
注意:这道题目中words数组里面的字符串长度都是相同的,不妨令长度为len

我们这么来看这道题目,我们把words数组里面的字符串都看成一个字母,那这个题目不就是让我们去在s字符串中去寻找words数组的异位词吗?

难点在哪里呢?

我们以示例一为例:
s = “barfoothefoobarman”, words = [“foo”,“bar”]
在s中寻找的时候,可能bar一组,也可能arf一组,也可能rfo一组,情况非常多
但是,不要忘记了,words数组里面的字符串长度是相同的,
也就是说s中一共也就只有len中情况,直接走len次滑动窗口就行了。

设置count来统计有效元素
我们只需要去统计滑动窗口中有效元素的个数即可。
依旧是进窗口后维护count,
出窗口前维护count。

当count==words.size(),此时的left即为有效下标。

注意:

该题目为定长滑动窗口,当窗口长度 > word.size()就要出窗口了。
该题目需要走len次滑动窗口

代码

vector<int> findSubstring(string s, vector<string>& words) {unordered_map<string,int> hash1;unordered_map<string,int> hash2;vector<int> v;for(auto& s1:words) hash1[s1]++;int count = 0,len = words[0].size(),size = words.size();for(int i = 0;i < len;++i)//走len次滑动窗口{ hash2.clear();//新的一次滑动窗口要重新初始化一下count = 0;for(int left = i,right = i;right < s.size();right += len){string in = s.substr(right,len);hash2[in]++;//进窗口if(hash1.count(in)&&hash2[in] <= hash1[in]) count++;if((right - left) / len + 1 > size)//出窗口{string out = s.substr(left,len);if(hash1.count(out) && hash2[out] <= hash1[out]) count--;hash2[out]--;left+= len;}if(count == size) v.push_back(left);}}return v;}

http://www.ppmy.cn/devtools/114375.html

相关文章

mongodb 安装教程

mongodb 安装教程&#xff1a; https://blog.51cto.com/u_13646338/5449015 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.9.tgz tar -zxvf mongodb-linux-x86_64-rhel70-5.0.9.tgz -C /opt/module/ [roothadoop102 module]# mv mongodb-linux-…

LabVIEW编程快速提升的技术

在LabVIEW程序员的成长过程中&#xff0c;很多技术和概念看似简单、常用&#xff0c;但真正掌握并能熟练运用&#xff0c;往往需要踏踏实实的实践与积累。没有什么是能够一蹴而就的&#xff0c;唯有通过不断的专注与深入&#xff0c;才能获得显著的提升。要想在LabVIEW开发上取…

ld-linux-x86-64.so.2

ld-linux-x86-64.so.2是Linux操作系统上x86_64架构的动态链接器。 ld-linux使用一系列的策略和配置文件来确定在哪里查找共享库。这通常包括查看/etc/ld.so.cache文件&#xff08;这是预先计算的共享库位置列表&#xff0c;该文件利用ldconfig工具管理&#xff09;&#xff0c;…

基于SpringBoot+Vue+MySQL的考编论坛网站

系统展示 用户前台界面 管理员后台界面 系统背景 在当前信息化高速发展的时代&#xff0c;考编已成为众多求职者的重要选择。然而&#xff0c;备考过程中信息获取、经验交流及资源分享的需求日益凸显。基于SpringBoot、Vue.js与MySQL构建的考编论坛网站应运而生&#xff0c;旨在…

11 vue3之插槽全家桶

插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用<slot></slot> 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&#xff0c;填充的内容会替换子组件的<slot></slot>标签。 匿名插槽 1.在子组…

LabVIEW机械产品几何精度质检系统

随着制造业的发展&#xff0c;对产品质量的要求越来越高&#xff0c;机械产品的几何精度成为衡量其品质的重要指标。为了提高检测效率和精度&#xff0c;开发了一套基于LabVIEW的几何精度质检系统&#xff0c;该系统不仅可以自动化地进行几何尺寸的测量&#xff0c;而且能实时分…

240919-Pip先在线下载不安装+再离线安装

A. 最终效果 # 使用modelscope sdk下载模型 import os os.environ[MODELSCOPE_CACHE] 您希望的下载路径from modelscope import snapshot_download model_dir snapshot_download(opendatalab/PDF-Extract-Kit) print(f"模型文件下载路径为&#xff1a;{model_dir}/model…

快速开发与维护:探索 AndroidAnnotations

在移动应用开发的世界中&#xff0c;效率和可维护性是两个至关重要的要素。随着应用功能的不断增长和用户需求的不断变化&#xff0c;开发者们一直在寻找能够提高生产力的工具和框架。今天&#xff0c;我们将深入探讨一个能够帮助开发者实现快速开发和易于维护的框架——Androi…

基于物联网的智能控制系统设计方案——物联网智能化控制箱

一、引言 随着信息技术的迅猛进步与广泛应用&#xff0c;物联网&#xff08;IoT&#xff09;已经成为连接各种设备和服务的关键平台&#xff0c;在众多行业中展示出其潜在价值和应用可能性。智能控制作为物联网的一个重要组成部分&#xff0c;因其能提供更为便利、舒适且安全的…

滑动窗口(3)_最大连续1的数组个数III

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 滑动窗口(3)_最大连续1的数组个数III 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; …

MySQL之约束

简述&#xff1a; 概念: 约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的 数据目的: 保证数据库中数据的正确、有效性和完整性。 分类 约束描述关键字非空约束限制该字段的数据不能为 NULLNOT NULL唯一约束保证该字段的所有数据都是唯一的&#xff0c;不重…

chapter16-坦克大战【1】——(自定义泛型)——day21

目录 569-坦克大战介绍 570-JAVA坐标体系 571-绘图入门和机制 572-绘图方法 573-绘制坦克游戏区域 574-绘制坦克 575-小球移动案例 576-事件处理机制 569-坦克大战介绍 570-JAVA坐标体系 571-绘图入门和机制 572-绘图方法 573-绘制坦克游戏区域 574-绘制坦克 575-小球移…

计算机毕业设计选题推荐-校园车辆管理系统-Java/Python项目实战(亮点:数据可视化分析、账号锁定)

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

libmodbus:写一个modbusTCP服务

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

【分立元件】案例:新人加了个TVS管为什么可能导致系统不能正常工作

因为最近在带多个新人,让其设计原理图和PCB总会发现各种电路问题点。比如TVS管接法问题。 TVS是一种限压型的过压保护器,它将过高的电压钳制至一个安全范围,藉以保护后面的电路,有着比其它保护元件更快的反应时间,这使TVS可用在防护lighting、switching、ESD等快速破坏性瞬…

Linux 中System V IPC的共享内存

1. 概念介绍 System V IPC&#xff08;Inter-Process Communication&#xff09;是一组在UNIX系统中用于进程间通信的机制&#xff0c;包括共享内存、消息队列和信号量。这些机制由System V内核提供&#xff0c;并且它们的存在不依赖于创建它们的进程&#xff0c;而是由内核管…

【计算机网络】数据链路层深度解析

概述三个重要问题封装成帧差错检测可靠传输 使用广播信道的数据链路层数据链路层的互连设备 媒体接入MAC地址集线器与交换机区别以太网交换机生成树协议STP 概述 链路就是从一个结点到相邻结点的一段物理线路&#xff0c;而中间没有任何其他的交换结点。数据链路是指把实现通信…

JavaScript网页设计案例分析

JavaScript网页设计案例分析 随着互联网技术的发展&#xff0c;JavaScript 已经成为现代网页设计中不可或缺的一部分。从简单的页面交互到复杂的应用程序开发&#xff0c;JavaScript 都发挥着至关重要的作用。本文将探讨几个运用 JavaScript 进行网页设计的经典案例&#xff0…

python 实现eulers totient欧拉方程算法

eulers totient欧拉方程算法介绍 欧拉函数&#xff08;Euler’s Totient Function&#xff09;&#xff0c;通常表示为 &#x1d711;(&#x1d45b;)&#xff0c;是一个与正整数 &#x1d45b;相关的函数&#xff0c;它表示小于或等于 &#x1d45b;的正整数中与 &#x1d45…

恶意Bot流量识别分析实践

1、摘要 随着互联网的发展&#xff0c;自动化工具和脚本&#xff08;Bots&#xff09;的使用越来越普遍。虽然一些善意 Bots 对于网站的正常运行和数据采集至关重要&#xff0c;但恶意 Bots 可能会对网站带来负面影响&#xff0c;如爬取敏感信息、恶意注册、刷流量等。因此&am…