LeetCode(32)串联所有单词的子串【滑动窗口】【困难】(含图解)

目录
- 1.题目
- 2.答案
- 3.提交结果截图
- 4.图解
链接: 串联所有单词的子串
1.题目
给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。
s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。
- 例如,如果
words = ["ab","cd","ef"], 那么"abcdef","abefcd","cdabef","cdefab","efabcd", 和"efcdab"都是串联子串。"acdbef"不是串联子串,因为他不是任何words排列的连接。
返回所有串联子串在 s 中的开始索引。你可以以 任意顺序 返回答案。
示例 1:
输入:s = "barfoothefoobarman", words = ["foo","bar"]
输出:[0,9]
解释:因为 words.length == 2 同时 words[i].length == 3,连接的子字符串的长度必须为 6。
子串 "barfoo" 开始位置是 0。它是 words 中以 ["bar","foo"] 顺序排列的连接。
子串 "foobar" 开始位置是 9。它是 words 中以 ["foo","bar"] 顺序排列的连接。
输出顺序无关紧要。返回 [9,0] 也是可以的。
示例 2:
输入:s = "wordgoodgoodgoodbestword", words = ["word","good","best","word"]
输出:[]
解释:因为 words.length == 4 并且 words[i].length == 4,所以串联子串的长度必须为 16。
s 中没有子串长度为 16 并且等于 words 的任何顺序排列的连接。
所以我们返回一个空数组。
示例 3:
输入:s = "barfoofoobarthefoobarman", words = ["bar","foo","the"]
输出:[6,9,12]
解释:因为 words.length == 3 并且 words[i].length == 3,所以串联子串的长度必须为 9。
子串 "foobarthe" 开始位置是 6。它是 words 中以 ["foo","bar","the"] 顺序排列的连接。
子串 "barthefoo" 开始位置是 9。它是 words 中以 ["bar","the","foo"] 顺序排列的连接。
子串 "thefoobar" 开始位置是 12。它是 words 中以 ["the","foo","bar"] 顺序排列的连接。
提示:
1 <= s.length <= 10^41 <= words.length <= 50001 <= words[i].length <= 30words[i]和s由小写英文字母组成
2.答案
class Solution {public List<Integer> findSubstring(String s, String[] words) {List<Integer> result = new ArrayList<>();int wordLength = words[0].length();int wordCount = words.length;for (int i = 0; i < wordLength; i++) {// 超出长度if (i + wordCount * wordLength > s.length()) {break;}// 初始化窗口Map<String, Integer> map = new HashMap<>();for (int j = 0; j < wordCount; j++) {String word = s.substring(i + j * wordLength, i + (j + 1) * wordLength);map.put(word, map.getOrDefault(word, 0) + 1);}// 筛掉原单词数组for (String word : words) {map.put(word, map.getOrDefault(word, 0) - 1);if (map.get(word) == 0) {map.remove(word);}}// 滑动窗口for (int j = 0; i + j + wordCount * wordLength <= s.length(); j+=wordLength) {if (j != 0) {String addWord = s.substring(i + j + wordLength * (wordCount - 1), i + j + wordLength * wordCount);map.put(addWord, map.getOrDefault(addWord, 0) + 1);if (map.get(addWord) == 0) {map.remove(addWord);}String delWord = s.substring(i + j - wordLength, i + j);map.put(delWord, map.getOrDefault(delWord, 0) - 1);if (map.get(delWord) == 0) {map.remove(delWord);}}if (map.size() == 0) {result.add(i + j);}}}return result;}
}
3.提交结果截图

4.图解
以如下测试用例举例说明:
输入:s = "barfoothefoobarman", words = ["foo","bar"]
输出:[0,9]
首先,可以将字符串 s 按照单词长度进行划分,通过开头跳过字符长度的方式,可以分为以下三种划分方式。

以划分方式1举例,可以将所有单词总长度(单词数 * 单词长度)来作为一个窗口,从左往右滑动。


最终得到的 index=0 和 index=9 就是我们的结果了。
整理完毕,完结撒花~ 🌻
相关文章:
LeetCode(32)串联所有单词的子串【滑动窗口】【困难】(含图解)
目录 1.题目2.答案3.提交结果截图4.图解 链接: 串联所有单词的子串 1.题目 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 w…...
【Delphi】使用TWebBrowser执行JavaScript命令传入JSON参数执行出错解决方案
目录 一、问题背景: 二、实际示例: 三、解决方案: 1. Delphi 代码: 2. javaScript代码: 一、问题背景: 在用Delphi开发程序,无论是移动端还是PC端,都可以很方便的使用TWebBrows…...
04 if进阶
elif 否则如果 如果条件没有满足 会继续进入“否则如果”里面判断 只要满足一个条件 条件判断立即终止 chinese 100 if chinese 100:print("我们去迪士尼玩")elif chinese > 90:print("我们去朱雀森林公园")else:print("回家写作业")if n…...
2023全球数字贸易创新大赛9-12
目录 回答评委提问:先说痛点-再说怎样解决 食品安全溯源是否全流程 星火• 链网...
vue3的两个提示[Vue warn]: 关于组件渲染和函数外部使用
1. [Vue warn]: inject() can only be used inside setup() or functional components. 这个消息是提示我们,需要将引入的方法作为一个变量使用。以vue-store为例,如果我们按照如下的方式使用: import UseUserStore from ../../store/module…...
Ubuntu环境下基于libxl库文件使用C++实现对表格的操作
功能 表格不存在则创建后再进行操作创建sheet添加新的工作表在sheet中增加数据设置单元格样式 相关配置 下载地址:libxl选择 LibXL for Linux 4.2.0 i386 x64 armhf aarch64 安装配置 1,使用 tar zxvf 文件名.tar.gz 进行文件解压2,创…...
Sentinel与SpringBoot整合
好的,以下是一个简单的Spring Cloud整合Sentinel的代码示例: 首先,在pom.xml中添加以下依赖: <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel&l…...
如何实现数据通过表格批量导入数据库
文章目录 1. 准备工作2. 创建数据库表3. 编写导入脚本4. 优化和拓展4.1 批量插入的优势4.2 错误处理4.3 数据验证4.4 数据转换 5. 总结 🎉如何实现数据通过表格批量导入数据库 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客&…...
(动手学习深度学习)第13章 计算机视觉---微调
文章目录 微调总结 微调代码实现 微调 总结 微调通过使用在大数据上的恶道的预训练好的模型来初始化模型权重来完成提升精度。预训练模型质量很重要微调通常速度更快、精确度更高 微调代码实现 导入相关库 %matplotlib inline import os import torch import torchvision f…...
训练跳跃(青蛙跳台阶),剑指offer,力扣
目录 题目地址: 题目: 青蛙跳台阶问题 我们直接看题解吧: 相似题目,斐波那契数列: 解题方法: 难度分析: 审题目事例提示: 解题思路: 代码实现: 小鸡识补充 题…...
Linux中路由route
route 显示当前路由表信息 route add -net 192.168.10.0 netmask 255.255.255.0 dev ens160去往192.168.10.0/24网段的路由通过ens160网卡出去add 添加路由(del表示删除路由)-A 设置地址类型(默认ipv4 配置ipv6地址时:-A …...
美国国家安全实验室员工详细数据在网上泄露
一个从事出于政治动机的攻击的网络犯罪组织破坏了爱达荷国家实验室(INL)的人力资源应用程序,该组织周日在电报上发帖称,已获得该核研究实验室员工的详细信息。 黑客组织 SiegedSec 表示,它已经访问了“数十万用户、员…...
一石激起千层浪,有关奥特曼被炒的消息引发了一场热烈的讨论
在毫无征兆的情况下,OpenAI CEO山姆-奥特曼被炒了。 一石激起千层浪,有关奥特曼被炒的消息引发了一场热烈的讨论。 有人将其看成是一场「宫斗」,有人将其看成是OpenAI的董事会与创始人们的一次纠偏。 无论如何,这样一件看似并无…...
Vue 定义只读数据 readonly
readonly 让一个响应式数据变为 **深层次的只读数据**。 isReadonly 判断一个数据是不是只读数据。 应用场景:不希望数据被修改时使用。 readonly 深层次只读: <template><h1>reactive数据</h1><p>姓名:{{ info…...
[Linux] Network: IPv6 link-local 地址是否可用不自动生成
原来有一段时间在做扩充产品的VLAN个数,然后就遇到过一个问题:说这个Linux的默认配置里,会为每一个网络接口添加一个link-local的地址,就是FE80::开头的地址,在RFC-4291里有如下的定义: Link-Local unicas…...
万字解析:十大排序(直接插入排序+希尔排序+选择排序+堆排序+冒泡排序+快速排序+归并排序+计数排序+基数排序+桶排序)
文章目录 十大排序排序算法复杂度及稳定性分析一、 排序的概念1.排序:2.稳定性:3.内部排序:4.外部排序: 二、插入排序1.直接插入排序2.希尔排序 三、选择排序1.直接选择排序方法一方法二直接插入排序和直接排序的区别 2.堆排序 四…...
基于原子轨道搜索算法优化概率神经网络PNN的分类预测 - 附代码
基于原子轨道搜索算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于原子轨道搜索算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于原子轨道搜索优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要…...
“我,24岁,年薪20万”:选对了行业究竟多重要?
那些在职场上顺风顺水,按部就班拿到高薪的人都有什么特点? 今天的主人公Flee告诉我,是稳。 在她的故事里,我看到一个“别人家的姑娘”,是怎样在职场上稳步晋升,大学毕业仅2年,就拿到18.6K月薪&a…...
【shell脚本】全自动完成pxe无人值守批量装机脚本,匹配centos系列
本脚本采用的是搭建ftp服务器、tftp服务器、dhcp服务器来完成文件的传输 ks应答文件为最小化安装,免去图形化,可以实现一键装机~~ #!/bin/bash yum -y install tftp-server dhcp vsftpd syslinux &> /dev/null ###脚本说明:需要输入…...
利用Python进行数据分析【送书第六期:文末送书】
👨🎓博主简介 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…...
明日方舟基建自动化管理:从手动烦恼到智能管家
明日方舟基建自动化管理:从手动烦恼到智能管家 【免费下载链接】arknights-mower 《明日方舟》长草助手 项目地址: https://gitcode.com/gh_mirrors/ar/arknights-mower 问题场景切入:当基建管理成为游戏负担 凌晨2点,小陈盯着手机屏…...
UDS诊断开发避坑指南:从ISO14229标准到代码实现,如何正确处理NRC优先级?
UDS诊断开发中的NRC优先级处理:从标准解读到嵌入式实践 在汽车电子控制单元(ECU)开发领域,UDS(Unified Diagnostic Services)诊断协议是实现车辆故障检测、参数配置和软件刷写等功能的核心技术框架。作为IS…...
MCP 2026智能调度落地实录:从CPU争抢率飙升92%到资源利用率稳定在89.6%的5步闭环优化法
更多请点击: https://intelliparadigm.com 第一章:MCP 2026智能调度落地实录:从CPU争抢率飙升92%到资源利用率稳定在89.6%的5步闭环优化法 在某金融核心交易系统升级MCP 2026调度引擎后,集群CPU争抢率一度飙升至92%,导…...
AI回答太冗长?我设计了三段式流式显示让信息层次分明
我是张大鹏,做了十多年人工智能,带过不少项目。说实话,最难的不是让AI生成正确的答案,是让答案以正确的方式呈现给用户。最近Claude 3.7推出了extended thinking模式,OpenAI的o系列也在做类似的事情——让AI的推理过程…...
Go语言封装企业微信机器人:提升开发效率与构建可靠告警系统
1. 项目概述:一个企业微信机器人的轻量级封装如果你在企业里负责自动化流程、监控告警或者日常办公效率提升,大概率听说过或者用过企业微信的群机器人。官方提供的Webhook接口虽然简单直接,但用起来总感觉差点意思:发消息要自己拼…...
体验 Taotoken 低延迟 API 调用为实时对话应用带来的流畅体感
体验 Taotoken 低延迟 API 调用为实时对话应用带来的流畅体感 1. 实时对话应用的技术挑战 在开发需要快速响应的聊天应用时,API 调用的延迟表现直接影响用户体验。传统方案中,开发者需要自行维护多个模型供应商的连接,处理不同接口的兼容性…...
非科班开发者跨界打造 DeepSeek-TUI,成本直降 98% 填补开源市场空白
【导语:近期,GitHub 热榜被开源项目 DeepSeek-TUI 引爆,非科班出身的开发者 Hunter Bown 凭借该项目成为五一科技圈热门话题。这款终端 AI 编程助手亮点颇多,成本大幅降低,迅速填补市场空白。】跨界开发者的传奇之路Hu…...
老外用 AI 日发100+条TK带货视频,推特40万人围观,我梳理了完整SOP并用Clipcat复现这套爆款复刻工作流
最近 X 上有个帖子彻底炸了。一个叫 MaverickEcom 的老外,发了一套 TikTok Shop 的 AI 内容工厂方法论,40 万 曝光,评论区全是 "这不是降维打击吗"。我花了两天把他的 YouTube 详解视频逐帧拆了一遍,说说我的理解&…...
百万上下文之后,拼什么?
过去几天,科技圈的视线全被DeepSeek吸走了。满屏都是传闻中的估值溢价,或者是跟各类国产算力芯片的适配通稿。市场的狂热情绪,很容易让人迷失在庞大的数字迷宫里。大众的关注点,要么是“百万上下文"这个听起来很唬人的标签&a…...
深入Linux内核:VFIO如何绕过KVM实现近乎裸机的I/O性能?一次讲透DMA与中断重映射
深入Linux内核:VFIO如何绕过KVM实现近乎裸机的I/O性能?一次讲透DMA与中断重映射 在虚拟化技术日新月异的今天,追求接近物理机性能的I/O虚拟化方案一直是开发者关注的焦点。传统虚拟化环境中,虚拟机对设备的访问需要经过层层抽象和…...
