LeetCode 30. 串联所有单词的子串
LeetCode 30. 串联所有单词的子串
给定一个字符串 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 <= 104
1 <= words.length <= 5000
1 <= words[i].length <= 30
words[i] 和 s 由小写英文字母组成
哈希表+滑动窗口
class Solution:def findSubstring(self, s: str, words: List[str]) -> List[int]:word_len = len(words[0])word_counter = Counter(words)s_len = len(s)if s_len < word_len * len(words):return []if s_len == word_len and s == words[0]:return [0]res = []for i in range(word_len):tmp_counter = word_counter.copy()left = right = iwhile left <= right < s_len:right_word = s[right:right+word_len]left_word = s[left:left+word_len]if right_word in word_counter:if tmp_counter[right_word] > 0:tmp_counter[right_word] -= 1if tmp_counter.total() == 0:res.append(left)else:tmp_counter[left_word] += 1left += word_lencontinueelse:tmp_counter = word_counter.copy()left = right + word_lenright += word_lenreturn res
滑动窗口固定写法
- while left <= right < s_len
- 正常情况右指针右滑 right += word_len 扩张
- 异常情况左指针右滑 left += word_len;continue 收缩
- 毛毛虫解法
小优化,使用 tmp_total 代替 tmp_counter.total(),好像没提升
class Solution:def findSubstring(self, s: str, words: List[str]) -> List[int]:word_len = len(words[0])word_counter = Counter(words)word_total = len(words)s_len = len(s)if s_len < word_len * len(words):return []if s_len == word_len and s == words[0]:return [0]res = []for i in range(word_len):tmp_counter, tmp_total = word_counter.copy(), word_totalleft = right = iwhile left <= right < s_len:right_word = s[right:right+word_len]left_word = s[left:left+word_len]if right_word in word_counter:if tmp_counter[right_word] > 0:tmp_counter[right_word] -= 1tmp_total -= 1if tmp_total == 0:res.append(left)else:tmp_counter[left_word] += 1tmp_total += 1left += word_lencontinueelse:tmp_counter = word_counter.copy()left = right + word_lentmp_total = word_totalright += word_lenreturn res
相关文章:
LeetCode 30. 串联所有单词的子串
LeetCode 30. 串联所有单词的子串 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 words [“ab”,“cd”,“ef”], 那么 “abcd…...
python本学期所有代码!
第一单元 ----------------------------------------------------------------------- #圆面积的计算 radius 25 area 3.1415 * radius * radius print(area) print("{:.2f}".format(area)) --------------------------------------------------------------------…...
武汉星起航:无锡跨境电商加速“出海”,物流升级助品牌全球布局
随着全球化的不断深入,跨境电商作为数字外贸的新业态,正逐渐成为无锡企业拓展海外市场的重要渠道。武汉星起航关注到,近年来,无锡市通过积极推进国际物流枢纽建设,完善海外仓布局,以及各特色产业带的积极参…...
Python+Pytest+Allure+Yaml+Pymysql+Jenkins+GitLab接口自动化测试框架详解
PythonPytestAllureYaml接口自动化测试框架详解 编撰人:CesareCheung 更新时间:2024.06.20 一、技术栈 PythonPytestAllureYamlJenkinsGitLab 版本要求:Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 安装python3.7&…...
stm32-hal库(5)--usart串口通信三种模式(主从通信)(关于通信失败和串口不断发送数据问题的解决)
问题: 最近发现,stm32cubemx最新版本f1系列的hal库(1.85版本)生成的hal库,其中stm32f1xx_hal_uart.c的库文件中,其串口发送接收存在一些问题: 1.没有使用 __HAL_LOCK 和 __HAL_UNLOCK 宏&…...
一文学会LVS:概念、架构、原理、搭建过程、常用命令及实战案例
引言 随着互联网技术的飞速发展,服务器负载均衡技术变得越来越重要。LVS(Linux Virtual Server)作为一种高效的负载均衡解决方案,广泛应用于各大企业的生产环境中。本文将深入探讨LVS的概念、架构、工作原理,详细讲解其…...
[Go 微服务] Kratos 使用的简单总结
文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施,不限定于某种注册中心,或数据库ORM等,所以您可以十分轻松地将任意库集成进项目里,与Kratos共同运作。 API -&…...
【unity实战】使用旧输入系统Input Manager 写一个 2D 平台游戏玩家控制器——包括移动、跳跃、滑墙、蹬墙跳
最终效果 文章目录 最终效果素材下载人物环境 简单绘制环境角色移动跳跃视差和摄像机跟随效果奔跑动画切换跳跃动画,跳跃次数限制角色添加2d物理材质,防止角色粘在墙上如果角色移动时背景出现黑线条方法一方法二 墙壁滑行实现角色滑墙不可以通过移动离开…...
【实战】EasyExcel实现百万级数据导入导出
文章目录 前言技术积累实战演示实现思路模拟代码测试结果 前言 最近接到一个百万级excel数据导入导出的需求,大概就是我们在进行公众号API群发的时候,需要支持500w以上的openid进行群发,并且可以提供发送openid数据的导出功能。可能有的同学…...
Graalvm配置文件与Feature和Substitute机制介绍
GraalVM介绍 GraalVM提前将Java应用程序编译成独立与机器码二进制文件(可执行文件、动态库文件),如windows系统中的exe文件和dll文件。与在Java虚拟机(JVM)上运行的应用程序相比,这些二进制文件更小,启动速…...
Appium adb 获取appActivity
方法一(最简单有效的方法) 通过cmd命令,前提是先打开手机中你要获取包名的APP adb devices -l 获取连接设备详细信息 adb shell dumpsys activity | grep mFocusedActivity 有时获取到的不是真实的Activity 方法二 adb shell monkey -p …...
调整分区失败致盘无法访问:深度解析与数据恢复全攻略
调整分区失败盘打不开的困境 在计算机的日常维护与管理中,调整磁盘分区是常见的操作之一,旨在优化存储空间布局、提升系统性能或满足特定应用需求。然而,当这一操作未能如预期般顺利进行,反而导致分区调整失败,进而使…...
试用笔记之-汇通计算机等级考试软件一级Windows
首先下载汇通计算机等级考试软件一级Windows http://www.htsoft.com.cn/download/htwork.rar...
Java的NIO体系
目录 NIO1、操作系统级别下的IO模型有哪些?2、Java语言下的IO模型有哪些?3、Java的NIO应用场景?相比于IO的优势在哪?4、Java的IO、NIO、AIO 操作文件读写5、NIO的核心类 :Buffer(缓冲区)、Channelÿ…...
自下而上的选股与自上而下的选股
一起学习了《战胜华尔街》,不知道大家有没有这么一种感受:林奇的选股方法是典型的自下而上的选股方法。虽然这一点没有单独拎出来讨论过,但在《从低迷中寻找卓越》《如何通过财务指标筛选股票?》《边逛街边选股?》《好…...
Tech Talk:智能电视eMMC存储的五问五答
智能电视作为搭载操作系统的综合影音载体,以稳步扩大的市场规模走入越来越多的家庭,成为人们生活娱乐的重要组成部分。存储部件是智能电视不可或缺的组成部分,用于保存操作系统、应用程序、多媒体文件和用户数据等信息。智能电视使用eMMC作为…...
scikit-learn教程
scikit-learn(通常简称为sklearn)是Python中最受欢迎的机器学习库之一,它提供了各种监督和非监督学习算法的实现。下面是一个基本的教程,涵盖如何使用sklearn进行数据预处理、模型训练和评估。 1. 安装和导入包 首先确保安装了…...
CentOS 7 搭建rsyslog日志服务器
CentOS 7 搭建rsyslog日志服务器 前言一、IP地址及主机名称规划1.修改主机名 二、配置rsyslog日志服务器1.安装rsyslog服务2.编辑/etc/rsyslog.conf 文件3.启动并启用rsyslog服务4.验证端口是否侦听 三、在rsyslog日志服务器上配置firewalld防火墙四、配置rsyslog日志客户端1.编…...
使用Spring Boot Actuator监控应用健康状态
使用Spring Boot Actuator监控应用健康状态 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何利用Spring Boot Actuator来监控和管理应用程序的…...
leetcode刷题:vector刷题
🔥个人主页:guoguoqiang. 🔥专栏:leetcode刷题 1.只出现一次的数字 这道题很简单,我们只需要遍历一次数组即可通过异或运算实现。(一个数与自身异或结果为0,任何数与0异或还是它本身) class Solut…...
开源镜像站架构与部署实战:APT、Docker、PyPI同步与性能优化
1. 项目概述:一个面向中文开发者的开源镜像站如果你是一名在国内的开发或运维工程师,对“镜像站”这个词一定不会陌生。无论是安装Python的pip包,还是更新Ubuntu的apt源,又或是拉取Docker镜像,我们常常会受限于网络环境…...
Claude 的下一代 Agent 架构:大脑与双手解耦(译文)
原文链接:https://www.anthropic.com/engineering/managed-agents Harnesses encode assumptions that go stale as models improve. Managed Agents—our hosted service for long-horizon agent work—is built around interfaces that stay stable as harnesses …...
液冷下半场:两相液冷比拼的不仅是冷板厚度,还比什么?
常见问题(FAQ) Q: 两相液冷能将芯片温差控制在多少? A: 可在2℃以内,典型工况下可达1.5℃。相比单相液冷的8℃以上波动,优势明显。 Q: 存量机房改造后,机柜功率能提升多少? A: 某数据中心改造…...
Fiddler抓包实战:从零到精通的移动端调试全链路指南
1. 为什么移动端开发离不开抓包工具 第一次接触移动端调试时,我完全不明白为什么同事总在电脑上开着那个叫Fiddler的软件。直到自己负责一个电商App项目,遇到支付接口返回数据异常却无法定位问题,才真正体会到抓包工具的价值。想象一下&#…...
AI Agent安全扫描:基于MCP协议构建实时防护中间件
1. 项目概述:一个为AI智能体打造的“安全扫描仪”最近在折腾AI Agent(智能体)的开发,尤其是在尝试将多个不同功能的Agent串联起来,构建一个能自主完成复杂任务的系统时,遇到一个很实际的问题:如…...
2026年度成都App开发推荐榜单专业又靠谱,让你轻松选择最佳应用
在2026年度成都APP开发推荐榜单中,我们为您提供了一系列专业的开发团队。这些团队均具备丰富的行业经验,专注于满足用户需求和优化用户体验。不论是功能开发还是市场推广,推荐的企业都能提供高效且可靠的解决方案,确保您的项目能够…...
copy4ai:专为AI工作流设计的智能复制工具,解决网页内容格式粘贴难题
1. 项目概述:一个为AI工作流设计的智能复制工具最近在折腾各种AI工具链的时候,我经常遇到一个挺烦人的问题:想把网页上的一段代码、一个表格,或者是一段带有特殊格式的文本,原封不动地喂给ChatGPT或者Claude࿰…...
012、三相电压与电流的测量方法
012、三相电压与电流的测量方法 上个月调试一台75kW永磁同步电机驱动器,现场报过流故障,示波器抓出来的电流波形像被狗啃过一样。折腾三天,最后发现是电流采样电阻的共模电压没处理好,ADC读数在零点附近来回跳。这种问题在实验室里根本复现不了,一上大功率就现原形。今天…...
保姆级避坑指南:在PVE 7.4上完美安装Windows 11专业版(解决TPM、驱动、磁盘识别问题)
PVE 7.4深度优化:Windows 11专业版安装全流程避坑手册 对于虚拟化技术爱好者来说,在Proxmox VE(PVE)上安装Windows 11专业版既是一次性能挑战,也是一次技术探索。不同于简单的安装指南,本文将聚焦于那些让大…...
claw-easy-setup:一键自动化部署脚本的设计与实战解析
1. 项目概述与核心价值最近在折腾一些自动化脚本和工具链,发现很多开源项目虽然功能强大,但初次部署的“冷启动”成本实在太高。光是看那一长串的依赖安装、环境配置、参数调优,就足以劝退不少想尝鲜的开发者。直到我遇到了stfurkan/claw-eas…...
