【算法刷题】Day15

文章目录

  • 1. 串联所有单词的子串
    • 题干:
    • 算法原理
    • 代码:
  • 2. 最小覆盖子串
    • 题干:
    • 算法原理:
      • 1、暴力枚举 + 哈希表
      • 2、滑动窗口 + 哈希表
    • 代码:

1. 串联所有单词的子串

在这里插入图片描述
在这里插入图片描述
原题链接


题干:

给定⼀个字符串 s 和⼀个字符串数组 words
words 中所有字符串 长度相同
s 中的 串联⼦串 是指⼀个包含 words中所有字符串以任意顺序排列连接起来的⼦串
、


算法原理

这道题和 Day14 中 所写的找到字符串所有字母异位词 很像
找到字符串所有字母异位词

因为 words 中所有字符串 长度相同
所以我们就可以把每一个字符串划分为长度相等的小字符串
并且用别的字母代替

s 中我们也可以根据相同的长度进行划分
这样我们对题目就进行了转化

在这里插入图片描述
不过在解题方面有些许的不同:

  1. 哈希表
    需要使用键值对的方式进行存储
    Map<String, Integer>
  2. left 和 right 指针的移动
    移动的步长是每个单词的长度(len)
  3. 划分窗口的执行次数
    由于 s 可以进行不同的划分
    我们就可以划分成 len 次

代码:

class Solution {public List<Integer> findSubstring(String s, String[] words) {List<Integer> ret = new ArrayList<Integer>();Map<String, Integer> hash1 = new HashMap<String, Integer>();//保存字典中所有单词的频次for(String str : words) {hash1.put(str, hash1.getOrDefault(str, 0) + 1);}int len = words[0].length();int m = words.length;for(int i = 0; i < len; i++) {Map<String, Integer> hash2 = new HashMap<String, Integer>();//保存窗口内所有单词的频次for(int left = i, right = i, count = 0; right + len <= s.length(); right += len) {//进窗口 + 维护 countString in = s.substring(right, right+len);hash2.put(in, hash2.getOrDefault(in, 0) + 1);if(hash2.get(in) <= hash1.getOrDefault(in, 0)) {count++;}//判断if(right - left + 1 > len * m) {//出窗口 + 维护 countString out = s.substring(left, left + len);if(hash2.get(out) <= hash1.getOrDefault(out, 0)) {count--;}hash2.put(out, hash2.get(out) - 1);left += len;}//更新结果if(count == m) {ret.add(left);}}}return ret;}
}

在这里插入图片描述

2. 最小覆盖子串

在这里插入图片描述
在这里插入图片描述
原题链接

题干:

有字符串 s 和 t
返回 s 中涵盖 t 中所有字符串的最小子串
寻找的子字符串不少于该字符数量
在这里插入图片描述


算法原理:

1、暴力枚举 + 哈希表

在这里插入图片描述

2、滑动窗口 + 哈希表

在这里插入图片描述
在暴力解法中,left++,right 需要返回原来重新遍历

那么right 是否需要回去呢?
left++ 后有以下两种情况:

  1. 依然符合要求,这个时候 right 不用动
  2. 不符合要求,这个时候 right 向后移动

这个时候,我们就可以使用滑动窗口来解决问题
在这里插入图片描述

  1. left = 0 ,righ = 0
  2. 进窗口 hash1[ in ]++
  3. 判断 check[ hah1,hash2 ]
    更新结果 更新起始位置 和 最短长度
    出窗口 hash2[ out ]–

优化:
我们可以优化判断条件

使用 count 标记有效字符的种类
如果hash2 中 A 的个数 = hash1 中 A 的个数才算有效

  1. 进窗口 进之后判断 hash2[ in ] == hash1[ in ],count++
  2. 出窗口 出之前判断 hash2[ out ] == hash1[ out ],count–
  3. 判断条件 count == hash1.size()

代码:

class Solution {public String minWindow(String ss, String tt) {char[] s = ss.toCharArray();char[] t = tt.toCharArray();int[] hash1 = new int[128];//数组模拟哈希表 统计 t 中字符出现的频次int kinds = 0;//字符 t 中,有多少种字符for(char ch : t) {if(hash1[ch] == 0) {kinds++;}hash1[ch]++;}int[] hash2 = new int[128];//统计窗口中字符的频次int minlen = Integer.MAX_VALUE;int begin = -1;for(int left = 0,right = 0, count = 0; right < s.length; right++) {char in = s[right];hash2[in]++;//进窗口 + 维护chountif(hash2[in] == hash1[in]) {count++;}while(kinds == count) {//判断if(right - left + 1 < minlen) {//更新结果begin = left;minlen = right - left + 1;}char out = s[left++];if(hash2[out] == hash1[out]) {//出窗口 + 维护countcount--;}hash2[out]--;}}if(begin == -1) {return new String();}else {return ss.substring(begin, begin + minlen);}}
}

在这里插入图片描述

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

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

相关文章

Vue项目使用WebAssembly之后,Nginx如何解决WebAssembly不支持的问题

在VUE项目中使用WebAssembly之后&#xff0c;打包的项目会出现下面的错误 Uncaught (in promise) TypeError: WebAssembly: Response has unsupported MIME type application/wasm; charsetutf-8 expected application/wasm 可以用以下办法解决 一&#xff1a;单独Nginx配置…

选择排序-排序算法

思路 选择排序&#xff08;Selection sort&#xff09;的主要思路是&#xff1a;在要排序的区间内找到一个最大的元素&#xff0c;将它放到数组的最后一个位置&#xff0c;然后在剩余的未排序区间内找到一个最大的元素&#xff0c;将它放到数组的倒数第二个位置。以此类推&…

基于 Flink CDC 构建 MySQL 的 Streaming ETL to MySQL

简介 CDC 的全称是 Change Data Capture &#xff0c;在广义的概念上&#xff0c;只要是能捕获数据变更的技术&#xff0c;我们都可以称之为 CDC 。目前通常描述的 CDC 技术主要面向数据库的变更&#xff0c;是一种用于捕获数据库中数据变更的技术。CDC 技术的应用场景非常广泛…

抖捧自动直播是什么,系统功能讲解

目前有在做实体行业级商家服务的老板 你还在为不会直播&#xff0c;不敢直播而苦恼吗&#xff1f; 你还在为想做直播&#xff0c;但没空开直播而焦灼吗&#xff1f; 今天&#xff0c;你的问题都可以统统解决 实体行业直播必备黑科技&#xff1a;抖捧AI自动直播 只需要一部手…

使用阿里巴巴同步工具DataX实现Mysql与ElasticSearch数据同步

一、Linux环境要求 二、准备工作 2.1 Linux安装jdk 2.2 linux安装python 2.3 下载DataX&#xff1a; 三、DataX压缩包导入&#xff0c;解压缩 四、编写同步Job 五、执行Job 六、定时更新 6.1 创建定时任务 6.2 提交定时任务 6.3 查看定时任务 七、增量更新思路 一、Linux环境要…

C#教程(一):面向对象

1、介绍 C#是一种多范式编程语言&#xff0c;但其中一个主要的编程范式是面向对象编程&#xff08;OOP&#xff09;。面向对象编程有一些特点&#xff0c;而C#提供了丰富的功能来支持这些特点。 2、面向对象特点 封装&#xff08;Encapsulation&#xff09;&#xff1a; 封装…

Nginx访问FTP服务器文件的时效性/安全校验

背景 FTP文件服务器在我们日常开发中经常使用&#xff0c;在项目中我们经常把FTP文件下载到内存中&#xff0c;然后转为base64给前端进行展示。如果excel中也需要导出图片&#xff0c;数据量大的情况下会直接返回一个后端的开放接口地址&#xff0c;然后在项目中对接口的参数进…

使用shell脚本将一台虚拟机上面数据分发到其他虚拟机上面xsync

目录 1&#xff0c;功能2&#xff0c;注意点3&#xff0c;shell脚本介绍4&#xff0c;bash内容 1&#xff0c;功能 使用shell脚本将一台虚拟机上面数据分发到其他虚拟机上面。 2&#xff0c;注意点 需要修改的地方&#xff1a;hadoop250 hadoop251 hadoop252 hadoop253 hado…

魔搭社区上线Mistral AI 首个开源 MoE 模型 Mixtral8x7B

Mistral AI 近日发布了首个开源 MoE 模型 Mixtral8x7B&#xff0c;并宣布在魔搭社区上线。 Mixtral-8x7B 是一款混合专家模型&#xff08;Mixtrue of Experts&#xff09;&#xff0c;由8个拥有70亿参数的专家网络组成&#xff0c;在能力上&#xff0c;Mixtral-8x7B 支持32k t…

美颜技术讲解:视频美颜SDK的开发与集成

如今&#xff0c;美颜技术的应用愈发成为吸引用户的一项重要功能。本文将深入探讨视频美颜SDK的开发与集成&#xff0c;揭示其背后的技术原理和实现步骤。 一、美颜技术的背后 美颜技术并非仅仅是简单的滤镜效果&#xff0c;而是一项涉及复杂图像处理和算法的技术。在视频美颜…

wordpress 修改社交图标

要去掉标记的图标&#xff0c;死活找不到在那里配置。后来找到了&#xff0c;下图&#xff08;wordpress 小白&#xff0c;特此记录&#xff09;

安装python第三方库后,在pycharm中不能正常导入

python小白学习opencv&#xff0c;使用pip安装完opencv库后import cv2报错&#xff0c;按照如下设置解决&#xff1a; 需要正确设置python解释器路径

Python内置类属性`__cmp__`属性的使用教程

概要 在Python中&#xff0c;__cmp__属性是一个特殊的方法&#xff0c;用于自定义类的实例之间的比较方式。深入了解和熟练运用这一特性&#xff0c;可以使自定义类更加灵活和强大。本教程将详细介绍__cmp__的基本概念、高级用法以及一些注意事项&#xff0c;通过丰富的示例代…

跨境电商群发消息工具定制贵吗?

随着全球电子商务的快速发展&#xff0c;跨境电商已经成为了一种新兴的商业形式。 为了能够更好地与海外客户沟通&#xff0c;许多卖家开始寻找跨境电商群发消息工具&#xff0c;那么&#xff0c;这些工具的定制费用是否昂贵呢? 首先&#xff0c;我们需要明确一点&#xff1…

在线免费压缩pdf文件

在线免费压缩pdf文件&#xff0c;不用登陆哦&#xff0c; https://www.ilovepdf.com/ https://online2pdf.com/#

IP属地变化背后的原因

随着互联网的普及和技术的不断发展&#xff0c;IP属地变化的现象越来越受到人们的关注。近日&#xff0c;有网友发现自己的IP属地发生了变化&#xff0c;引发了广泛讨论。那么&#xff0c;IP属地为什么会发生变化呢&#xff1f; 首先&#xff0c;网络环境的变化是导致IP属地变化…

uniapp 之 图片 视频 文件上传

<view class"" style"padding: 24rpx 0"><text>相关资料 <text class"fs-26 color-666">&#xff08;图片、视频、文档不超过9个&#xff09;</text> </text><view class"flex align-center" style&…

亚马逊云科技re_Invent 2023产品体验:亚马逊云科技产品应用实践 王炸产品Amazon Q,你的AI助手

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 意料之中 2023年9月25日&#xff0c;亚马逊宣布与 Anthropic 正式展开战略合作&#x…

Globalsign—— SSL证书中的LV

一&#xff1a;SSL证书 SSL 证书可以实现网站的 https 加密&#xff0c;保证从客户端到服务端传输的数据是加密的。越来越多的网络信息泄露事件也给我们敲响了警钟&#xff0c;信息安全不容小觑。网站建设者们也应该要把网络信息安全放在首位&#xff0c;给网站部署 SSL …

第一个“hello Android”程序

1、首先安装Android studio&#xff08;跳过&#xff09; Android Studio是由Google推出的官方集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于Android应用程序的开发。它是基于JetBrains的IntelliJ IDEA IDE构建的&#xff0c;提供了丰富的功能和工具&#xff0…