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 由小写英文字母组成

通过次数

180.3K

提交次数

458.7K

通过率

39.3%

我们可以:首先计算了单个单词的长度和所有单词的总长度,然后使用一个循环来检查字符串中的每个可能的子串。

它维护两个映射,一个用于跟踪当前子串中的单词计数,另一个用于跟踪目标单词计数。如果这两个映射相等,那么当前子串是一个串联子串,将其起始位置添加到结果列表中来处理。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class Solution {public List<Integer> findSubstring(String s, String[] words) {List<Integer> result = new ArrayList<>();if (s == null || s.length() == 0 || words == null || words.length == 0) {return result;}int wordLength = words[0].length();int totalLength = wordLength * words.length;Map<String, Integer> wordCountMap = new HashMap<>();for (String word : words) {wordCountMap.put(word, wordCountMap.getOrDefault(word, 0) + 1);}for (int i = 0; i <= s.length() - totalLength; i++) {String substring = s.substring(i, i + totalLength);Map<String, Integer> currentWordCountMap = new HashMap<>();for (int j = 0; j < totalLength; j += wordLength) {String word = substring.substring(j, j + wordLength);currentWordCountMap.put(word, currentWordCountMap.getOrDefault(word, 0) + 1);}if (currentWordCountMap.equals(wordCountMap)) {result.add(i);}}return result;}public static void main(String[] args) {Solution solution = new Solution();String s1 = "barfoothefoobarman";String[] words1 = {"foo", "bar"};System.out.println(solution.findSubstring(s1, words1));String s2 = "wordgoodgoodgoodbestword";String[] words2 = {"word", "good", "best", "word"};System.out.println(solution.findSubstring(s2, words2));String s3 = "barfoofoobarthefoobarman";String[] words3 = {"bar", "foo", "the"};System.out.println(solution.findSubstring(s3, words3));}
}

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

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

相关文章

Java多线程的3种等待唤醒机制

Java多线程 3 种等待、唤醒机制 Object类中的wait、notify方法配置synchronized关键字&#xff1b;Condition接口中的await、signal方法配合Lock&#xff1b;LockSupport类中的park、unpark方法&#xff08;无需锁&#xff09; 一、Object类中的wait和notify方法实现线程的等…

阻容降压电阻应用

公式&#xff1a;Xc1/2πfC 电流&#xff1a;IU/Xc 举例&#xff1a;1uf金属化聚丙烯膜电容的容抗是3184欧姆。电流是70ma。 实际应用中根据工作电流去倒推算电容。

vue Sts认证后直传图片到阿里云OSS

后端进行sts认证生成临时身份凭证&#xff0c;前端通过凭证直传图片等文件到OSS中 一 OSS配置 增加用户和角色&#xff0c;创建OSS bucket 1.1 添加用户 登录阿里云管理控制台&#xff0c;右侧头像&#xff0c;进入访问控制 点击左侧导航栏的身份管理的用户&#xff0c;点击…

景联文科技助力金融机构强化身份验证,提供高质量人像采集服务

随着社会的数字化和智能化进程的加速&#xff0c;人像采集在金融机构身份认证领域中发挥重要作用&#xff0c;为人们的生活带来更多便利和安全保障。 金融机构在身份验证上的痛点主要包括以下方面&#xff1a; 身份盗用和欺诈风险&#xff1a;传统身份验证方式可能存在漏洞&am…

基于ssm的大学生社团管理系统

基于ssm的大学生社团管理系统 摘要 基于SSM的大学生社团管理系统是一个全面、高效的社团管理平台&#xff0c;旨在帮助大学生和社团管理员更方便、更快捷地进行社团活动的组织和管理。该系统基于Spring、SpringMVC和MyBatis&#xff08;简称SSM&#xff09;开发&#xff0c;这三…

理解RNN以及模型搭建代码

RNN结构 这是一张不直观易懂的RNN结构示意图。但也是大家见得最多结构示意图。 RNN模型解释 RNN一文就讲解清楚的博客&#xff0c;看这里&#xff1a;https://zhuanlan.zhihu.com/p/408998328 RNN为什么梯度消失和梯度爆炸&#xff0c;看这里&#xff1a;https://zhuanlan.z…

Unity Mirror学习(三)ClientRpc特性使用

ClientRpc特性 1&#xff0c;从服务端任意一网络对象发送到客户端 2&#xff0c;修饰方法的&#xff0c;在服务器上调用此方法&#xff0c;它将在所有客户端执行&#xff08;我的理解:服务端广播消息&#xff0c;消息方法&#xff09; 3&#xff0c;此方法不会在本地执行 它和…

计算机毕业设计 基于SpringBoot的私人西服定制系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

黑豹程序员-架构师学习路线图-百科:Knife4j API接口文档管理

文章目录 由来&#xff1a;接口文档第一代&#xff1a;Swagger第二代&#xff1a;Knife4j界面 由来&#xff1a;接口文档 古老编程是一个语言前后端通吃&#xff0c;ASP、JSP、PHP都是如此。 但随着项目规模变大&#xff0c;项目团队也开始壮大&#xff0c;岗位职责开始细分&a…

HTML的初步学习

HTML HTML 描述网页的骨架, 标签化的语言. HTML 的执行是浏览器的工作,浏览器会解析 html 的内容,根据里面的代码,往页面上放东西,浏览器的工作归根结底,还是以汇编的形式在CPU上执行. 浏览器对于html语法格式的检查没有很严格,即使你写的代码有一些不合规范之处,浏览器也会尽可…

Avalonia播放视频(mp4)

1.Nuget添加类库Dove.Avalonia.Extensions.Media&#xff0c;项目路径https://github.com/michael-eddy/Avalonia.Extensions/ 2.Nuget添加VideoLAN.LibVLC.Windows PlatformLibVLC PackageMinimum OS VersionWindowsVideoLAN.LibVLC.WindowsWindows XPUWPVideoLAN.LibVLC.UW…

华为云交换数据空间 EDS:“可信、可控、可证”能力实现你的数据你做主

文章目录 前言一、数据安全流通价值的必要性和紧迫性1.1、交换数据空间&#xff08;EDS&#xff09;背景1.2、《数字中国建设整体布局规划》1.3、数据流通成为制约数据要素价值释放的瓶颈 二、华为云 EDS 解决方案介绍2.1、构建可控数据交换空间2.2、可控的数据交换框架2.3、定…