当前位置: 首页 > news >正文

算法-滑动窗口-串联所有单词的子串

算法-滑动窗口-串联所有单词的子串

1 题目概述

1.1 题目出处

https://leetcode.cn/problems/substring-with-concatenation-of-all-words/

1.2 题目描述

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

2 滑动窗口+Hash表

2.1 解题思路

  1. 构建一个大小为串联子串的总长的滑动窗口
  2. 为每个words中的子串创建一个hash表, <子串值,子串出现次数>
  3. 记录每次开始位置,从左往右遍历字符串s,每次截取words[0]长度的子串,和2中hash表对比,如果没有或者使用次数超限,就表示该组合无法构成,退出该次检测;否则继续检测,直到构成的串联子串长度满足要求或者已检测长度超限。构建成功时,记录下起始序号
  4. 一轮检测完成后,窗口向右滑动1个长度,继续下一轮检测

2.2 代码

class Solution {public List<Integer> findSubstring(String s, String[] words) {List<Integer> resultList = new ArrayList<>();int windowSize = words[0].length();if (windowSize > s.length()) {return resultList;}int strLength = windowSize * words.length;if (strLength > s.length()){return resultList;}Map<String, Integer> wordMap = new HashMap<>();for (int i = 0; i < words.length; i++) {Integer subKeyTimes = wordMap.get(words[i]);if (null == subKeyTimes) {subKeyTimes = 0;} wordMap.put(words[i], subKeyTimes + 1);}for (int i = 0; i <= s.length() - strLength; i++) {int result = getStart(s, words, strLength, windowSize, i, wordMap);if (result != -1) {resultList.add(result);}}return resultList;}private int getStart(String s, String[] words, int strLength, int windowSize, int first, Map<String, Integer> wordMap) {int start = -1;int length = 0;Map<String, Integer> useMap = new HashMap();for (int i = first; i < s.length() && length < strLength && i < first + strLength; i += windowSize) {String sub = s.substring(i, i + windowSize);Integer subKeyTimes = wordMap.get(sub);if (null == subKeyTimes) {return -1;}Integer useTimes = useMap.get(sub);if (null == useTimes) {useTimes = 1; } else {useTimes += 1;}if (useTimes > subKeyTimes) {return -1;}useMap.put(sub, useTimes);length += windowSize;if (start == -1) {start = i;}}if (length == strLength) {return start;}return -1;}
}

2.3 时间复杂度

在这里插入图片描述
s.length=n,words.length=m ,时间复杂度O(n*m)

2.4 空间复杂度

O(m)

3 回溯法+交换字符串

3.1 解题思路

3.2 代码


3.3 时间复杂度

3.4 空间复杂度

O(N)

相关文章:

算法-滑动窗口-串联所有单词的子串

算法-滑动窗口-串联所有单词的子串 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/substring-with-concatenation-of-all-words/ 1.2 题目描述 2 滑动窗口Hash表 2.1 解题思路 构建一个大小为串联子串的总长的滑动窗口为每个words中的子串创建一个hash表, <子…...

2023年7月京东美妆护肤品小样行业数据分析(京东数据挖掘)

如今&#xff0c;消费者更加谨慎&#xff0c;消费决策也更加理性。在这一消费环境下&#xff0c;美妆护肤市场中&#xff0c;面对动辄几百上千的化妆品&#xff0c;小样或体验装无疑能够降低消费者的试错成本。由此&#xff0c;这门生意也一直备受关注。 并且&#xff0c;小样…...

记录Taro巨坑,找不到sass类型定义文件

问题 taronutuisassts项目里tsconfig.json一直报红报错。 找不到“sass”的类型定义文件。 程序包含该文件是因为: 隐式类型库 “sass” 的入口点 其实正常人想的肯定是装上 types/sass试试。开始我试过了&#xff0c;没用。删了依赖重装也没用。后面在issue中找到答案了 解决…...

CS1988|C#无法在异步方法中使用ref,in,out类型的参数的问题

CS1988|C#无法在异步方法中使用ref,in,out类型的参数 &#x1f300;|场景&#xff1a; BlazorServer的场景中推荐使用异步方法&#xff0c;使用ref,out,in为参数前缀则报错CS1988 原因如下: ref parameters are not supported in async methods because the method may not h…...

ubuntu开机失败——ACPI Error

开机循环进入GNU GRUB 或者 黑屏 1.acpioff 解决办法 1&#xff09;先用下面方法进入系统 2&#xff09;更改grub ref 开机循环进入GNU GRUB 或者 黑屏 有提示ACPI Error错误如图&#xff1a; 解决办法 1&#xff09;先用下面方法进入系统 在GUN GRUB界面&#xff0c;选择ubun…...

搭建开发环境-操作系统篇(一键搭建开发环境)

概述 所谓工欲善其事必先利其器&#xff0c;搭环境往往是开发过程中卡出很多初学者的拦路虎。 对于很多老鸟来说&#xff0c;很多东西都已经习惯成自然&#xff0c;也就没有刻意和初学者说。但对于很多初学者&#xff0c;却是受益良多。 这个系列&#xff0c;先从操作系统开始…...

人工智能AI绘画接入使用文档

人工智能AI绘画接入使用 一、人工智能AI绘画二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 AI绘画优秀描述例子四、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 五、重要说明六、AI绘画成果展示 一、人工智能AI绘画 AI作画,用户可以在平台上…...

如何使用PyQt进行文件操作

PyQt是一个非常强大的Python GUI库&#xff0c;它可以帮助我们创建漂亮的跨平台应用程序。不过&#xff0c;在你开始使用PyQt进行文件操作之前&#xff0c;我想提醒你&#xff0c;这并不是在操作文件系统&#xff0c;而是在操作文件和文件夹。 首先&#xff0c;我们要导入PyQt…...

阿里云CDN加速器基本概念与购买开通

文章目录 1.CDN加速器的基本概念1.1.CDN加速器基本介绍1.2.网站引入CDN加速器的架构图1.3.CDN加速器的工作原理1.4.引入CDN后域名解析变成了CNAME&#xff1f; 2.开通阿里云CDN加速服务 1.CDN加速器的基本概念 CDN加速器官方文档&#xff1a;https://help.aliyun.com/product/…...

2023河南萌新联赛第(六)场:河南理工大学-F 爱睡大觉的小C

2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学-F 爱睡大觉的小C https://ac.nowcoder.com/acm/contest/63602/F 文章目录 2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学-F 爱睡大觉的小C题意解题思路 题意 新学期的概…...

[C++ 网络协议编程] 域名及网络地址

1. DNS服务器 DNS&#xff08;Domain Name System&#xff09;&#xff1a;是对IP地址和域名&#xff08;如:www.baidu.com等&#xff09;进行相互转换的系统&#xff0c;其核心是DNS服务器。 我们输入的www.baidu.com是域名&#xff0c;是一种虚拟地址&#xff0c;而非实际地…...

Java【HTTP】什么是 Cookie 和 Session? 如何理解这两种机制的区别和作用?

文章目录 前言一、Cookie1, 什么是 Cookie2, Cookie 从哪里来3, Cookie 到哪里去4, Cookie 有什么用 二、Session1, 什么是 Session2, 理解 Session 三、Cookie 和 Session 的区别总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; …...

使用U盘重装Windows10系统详细步骤及配图【官方纯净版】

文章目录 1.制作启动盘1.1准备U盘及一台电脑1.2下载win10安装包 2.安装操作系统2.1插入系统安装盘2.2设置启动盘为第一启动项2.3开始安装操作系统 3.安装成功后进入图形界面3.1启动问题3.2驱动问题3.3调出"控制面板"3.4给磁盘分区 4.win10激活 前天下午不知道怎么想的…...

数据结构之——(手撕)顺序表

本章会介绍的知识点如下图&#xff1a; 1&#xff1a; 顺序表的概念&#xff1a;顺序表是用一段物理地址连续的存储单元依次存储数据的线性结构&#xff0c;通常我们使用数组来表示&#xff0c;对数组进行增删查改。 顺序表的结构&#xff1a;逻辑结构与物理结构都是内存中一块…...

冠达管理:非银金融是什么?

非银金融&#xff08;Non-banking Financial Institutions&#xff0c;简称非银&#xff09;是指除了传统的银行以外的其他金融机构。与银行不同的是&#xff0c;非银金融机构没有颁发钱银的权利&#xff0c;但在金融市场中发挥着重要的效果。在全球范围内&#xff0c;非银金融…...

go 结构体

定义结构体 package mainimport "fmt"type Person struct {age, id intname, email string }func main() {var p Personfmt.Printf("p: %v\n", p)p.age 100p.name "jaja"fmt.Printf("p.name: %v\n", p.name)// 匿名结构体var P…...

C++学习笔记---- 引用

1、作用 给变量起别名 基本语法&#xff1a;数据类型 &别名 原名 示例&#xff1a; #include <iostream> using namespace std;int main() {int a 1;int &b a;cout << "a " << a << endl;cout << "b " <…...

2023国赛数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法&#xff0c;其…...

Cesium加载Supermap的wmts服务

最近使用cesium 加载supermap的wmts 服务&#xff0c;多次遇到加载异常与白页面问题&#xff0c;纠结好久最后才搞定[特此记录] 1、首先找到方法加载wmts 的api 文档 官方提示使用WebMapTileServiceImageryProvider加载wmts 2、然后编辑加载代码 //1.新建ImageryProviderlet…...

C/C++:C/C++在大数据时代的应用,以及C/C++程序员未来的发展路线

目录 1.C/C在大数据时代的应用 1.1&#xff1a;C/C数据处理 1.2&#xff1a;C/C数据库 1.3&#xff1a;C/C图像处理和计算机视觉 1.3.1&#xff1a;导读 2.C/C程序员未来的发展路线 2.1&#xff1a;图导 1.C/C在大数据时代的应用 C/C在大数据时代中仍然是一种被广泛应用的编…...

别再死记硬背了!一张图看懂5G NR LDPC码BG1和BG2的选择规则

5G NR LDPC码BG选择逻辑&#xff1a;从标准文档到工程实践的精要解析 在5G新空口&#xff08;NR&#xff09;物理层设计中&#xff0c;低密度奇偶校验&#xff08;LDPC&#xff09;码作为数据信道的核心编码方案&#xff0c;其性能直接决定了系统吞吐量与可靠性。而基本图&…...

IoTDB与TimechoDB深度解析

全球物联网设备将在2025年突破416亿台&#xff0c;每天产生79.4ZB的数据&#xff0c;相当于8000多万个1TB硬盘才能装下。面对这场数据海啸&#xff0c;传统数据库纷纷“侧漏”&#xff0c;时序数据库成为企业数字化升级的“救生艇”。 本文将从五大核心维度&#xff0c;系统剖…...

AI Agent工作流引擎:从DAG编排到生产级应用实践

1. 项目概述&#xff1a;AI Agent工作流引擎的诞生与价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“ai-agent-workflow”。光看名字&#xff0c;你可能觉得这又是一个关于AI智能体的框架&#xff0c;但仔细研究它的代码和设计理念&#xff0c;你会发现它瞄准的是一…...

开源AI智能体技能库:模块化设计赋能AI应用开发

1. 项目概述&#xff1a;一个开源的AI智能体技能库最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;叫free-ai-agent-skills。光看名字&#xff0c;你可能会觉得这又是一个堆砌各种AI工具调用的代码仓库。但点进去仔细研究后&#xff0c;我发现它的定位和设…...

嵌入式Linux动态引脚复用实战:RK3568 GPIO与I2C功能切换详解

1. 项目概述与核心价值在嵌入式Linux开发中&#xff0c;尤其是基于瑞芯微RK3568这类高度集成的SoC平台&#xff0c;引脚复用&#xff08;Pin Mux&#xff09;的管理是驱动开发者的基本功&#xff0c;也是从“会用”到“精通”的关键分水岭。很多朋友在初次接触时&#xff0c;往…...

考公学习追踪器:用数据驱动备考,打造个人学习仪表盘

1. 项目概述&#xff1a;一个为“考公”学子量身定制的学习追踪器如果你正在准备公务员考试&#xff0c;或者身边有朋友在“考公”&#xff0c;那你一定对那种“学了忘&#xff0c;忘了学”的循环深有体会。行测的题海、申论的素材、时政的热点&#xff0c;每天的学习任务像一座…...

基于MCP协议构建专属AI开发助手:从原理到实践

1. 项目概述&#xff1a;一个为开发者定制的MCP服务器最近在折腾AI应用开发&#xff0c;特别是想给Claude、Cursor这类智能助手增加一些“超能力”&#xff0c;让它们能直接操作我本地的开发环境。比如&#xff0c;让AI帮我直接运行单元测试、查看最近的Git提交、或者分析某个目…...

RK3568 Debian系统Docker安装与ARM64容器化部署实战指南

1. 项目概述与核心价值最近在折腾一块基于瑞芯微RK3568的开发板&#xff0c;想在上面跑一些服务&#xff0c;自然而然地就想到了Docker。毕竟&#xff0c;Docker带来的环境隔离和便捷部署&#xff0c;对于嵌入式开发和边缘计算场景来说&#xff0c;简直是“神器”。但当我真正动…...

Python实时通信实战:Flask-SocketIO深度解析

Python实时通信实战&#xff1a;Flask-SocketIO深度解析 引言 在Python开发中&#xff0c;实时通信是构建现代Web应用的核心技术。作为一名从Rust转向Python的后端开发者&#xff0c;我深刻体会到Flask-SocketIO在实时通信方面的优势。Flask-SocketIO为Flask应用提供了WebSocke…...

白细胞介素-17(IL-17):炎症与免疫调节中的关键细胞因子

白细胞介素-17&#xff08;Interleukin-17, IL-17&#xff09;作为IL-17细胞因子家族中的核心成员&#xff0c;在免疫应答、炎症反应及宿主防御中扮演着举足轻重的角色。自其被发现以来&#xff0c;IL-17在免疫学、炎症性疾病及肿瘤生物学等领域的研究中持续引发关注。本文旨在…...