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

力扣labuladong一刷day9滑动窗口共4题

力扣labuladong一刷day9滑动窗口共4题

文章目录

      • 力扣labuladong一刷day9滑动窗口共4题
      • 一、76. 最小覆盖子串
      • 二、567. 字符串的排列
      • 三、438. 找到字符串中所有字母异位词
      • 四、3. 无重复字符的最长子串

一、76. 最小覆盖子串

题目链接:https://leetcode.cn/problems/minimum-window-substring/
思路:典型的滑动窗口题目,使用一个map记录所必须的字符个数,使用另外一个map去记录滑动窗口内部的need字符,一旦need所需的个数都满足以后,就开始缩小滑动窗口,在缩小滑动窗口的过程中不断记录最小的窗口长度以及窗口的起始点,并且在map不满足need时结束缩小窗口,继续扩大窗口。

class Solution {public String minWindow(String s, String t) {Map<Character, Integer> need = new HashMap<>();Map<Character, Integer> window = new HashMap<>();int left = 0, right = 0, valid = 0;int start = 0, max = Integer.MAX_VALUE;for (char c : t.toCharArray()) {need.put(c, need.getOrDefault(c, 0)+1);}while (right < s.length()) {char c = s.charAt(right);right++;if (need.containsKey(c)) {window.put(c, window.getOrDefault(c, 0)+1);if (window.get(c).equals(need.get(c))) {valid++;}}while (valid == need.size()) {if (right - left < max) {start = left;max = right-start;}char cl = s.charAt(left);left++;if (need.containsKey(cl)) {if (window.get(cl).equals(need.get(cl))) valid--;window.put(cl, window.get(cl)-1);}}}return max == Integer.MAX_VALUE ? "" : s.substring(start, start+max);}
}

二、567. 字符串的排列

题目链接:https://leetcode.cn/problems/permutation-in-string/
思路:本题要求s1是s2子串的排列,那就是要求s1与s2的子串长度要相等,那就是我们只需要控制滑动窗口的长度等于子串长度即可,长度相等时只要s1中的字符都出现了即可返回,然后就是正常缩小窗口,再扩大窗口。

class Solution {public boolean checkInclusion(String s1, String s2) {Map<Character, Integer> need = new HashMap<>();Map<Character, Integer> window = new HashMap<>();int left = 0, right = 0, valid = 0;for (char c : s1.toCharArray()) {need.put(c, need.getOrDefault(c, 0) + 1);}while (right < s2.length()) {char c = s2.charAt(right);right++;if (need.containsKey(c)) {window.put(c, window.getOrDefault(c, 0)+1);if (window.get(c).equals(need.get(c))) valid++;}while (right - left == s1.length()) {if (valid == need.size()) {return true;}char cl = s2.charAt(left);left++;if (need.containsKey(cl)) {if (window.get(cl).equals(need.get(cl))) valid--;window.put(cl, window.get(cl)-1);}}}return false;}
}

三、438. 找到字符串中所有字母异位词

题目链接:https://leetcode.cn/problems/find-all-anagrams-in-a-string/
思路:和上一题基本差不多,也是要求p与s的子串长度相等,我们只需要控制窗口等于p的长度即可,然后在其中判断。

class Solution {public List<Integer> findAnagrams(String s, String p) {List<Integer> list = new ArrayList<>();Map<Character, Integer> need = new HashMap<>();Map<Character, Integer> window = new HashMap<>();int left = 0, right = 0, valid = 0;for (char c : p.toCharArray()) {need.put(c, need.getOrDefault(c, 0)+1);}while (right < s.length()) {char cr = s.charAt(right);right++;if (need.containsKey(cr)) {window.put(cr, window.getOrDefault(cr, 0)+1);if (window.get(cr).equals(need.get(cr))) valid++;}if (right - left == p.length()) {if (valid == need.size()) {list.add(left);}char cl = s.charAt(left);left++;if (need.containsKey(cl)) {if (window.get(cl).equals(need.get(cl))) valid--;window.put(cl, window.get(cl)-1);}}}return list;}
}

四、3. 无重复字符的最长子串

题目链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/
思路:求无重复字符串的最长子串,只需要用map收集字符即可,只要当前字符个数大于1即可开始缩小滑动窗口,直到当前字符的个数不再大于1.
最大长度max的记录放在最后。

class Solution {public int lengthOfLongestSubstring(String s) {Map<Character, Integer> map = new HashMap<>();int left = 0, right = 0, max = 0;while (right < s.length()) {char c = s.charAt(right);right++;map.put(c, map.getOrDefault(c, 0)+1);while (map.get(c) > 1) {char cl = s.charAt(left);left++;map.put(cl, map.get(cl)-1);}max = Math.max(max, right - left);}return max;}
}

相关文章:

力扣labuladong一刷day9滑动窗口共4题

力扣labuladong一刷day9滑动窗口共4题 文章目录 力扣labuladong一刷day9滑动窗口共4题一、76. 最小覆盖子串二、567. 字符串的排列三、438. 找到字符串中所有字母异位词四、3. 无重复字符的最长子串 一、76. 最小覆盖子串 题目链接&#xff1a;https://leetcode.cn/problems/m…...

ubuntu开机系统出错且无法恢复。请联系系统管理员。

背景&#xff1a; ubuntu22.04.2命令行&#xff0c;执行自动安装系统推荐显卡驱动命令&#xff0c;字体变大&#xff0c;重启后出现如下图错误&#xff0c;无法进入系统&#xff0c;无法通过CTRLALTF1-F3进入TTY模式。 解决办法&#xff1a; 1.首先要想办法进入系统&#xff…...

Transformer详解一:transformer的由来和先导知识

目录 参考资料前言一、预训练二、神经网络语言模型&#xff08;NNLM&#xff09;&#xff1a;预测下一个词one-hot编码的缺陷词向量&#xff08;word embedding&#xff09; 三、Word2Vec模型&#xff1a;得到词向量CBOWSkip-gramWord2Vec和NNLM的区别Word2Vec的缺陷 四、ELMO模…...

数字化产品经理的金字塔能力模型

在企业数字化转型的浪潮下&#xff0c;要求IT团队更加主动的服务业务、赋能业务&#xff0c;而数字化产品经理正是IT、业务融合的桥梁&#xff0c;该岗位需要具备业务、技术、商业的复合知识结构&#xff0c;并且拥有很强的自驱力。那么数字化产品经理在企业如何产生价值、赋能…...

这 11 个 for 循环优化你得会

日常开发中&#xff0c;经常会遇到一些循环耗时计算的操作&#xff0c;一般也都会采用 for 循环来处理&#xff0c;for 作为编程入门基础&#xff0c;主要是处理重复的计算操作&#xff0c;虽然简单好用&#xff0c;但在写法上也有很多的考究&#xff0c;如果处理不好&#xff…...

JVM字符串常量池StringTable

目录 一、StringTable为什么要调整 二、String的基本特性 三、String的内存分配 四、字符串拼接操作 五、intern()方法 六、Stringtable的垃圾回收 七、G1中String去重操作 一、StringTable为什么要调整 jdk7之前&#xff0c;hotspot对于方法区的实现是永久代&#xff…...

【华为OD题库-010】寻找矿堆的最大价值-Java

题目 给你一个由0(空地)、1(银矿)、2(金矿)组成的的地图&#xff0c;矿堆只能由上下左右相邻的金矿或银矿连接形成。超出地图范围可以认为是空地。 假设银矿价值1&#xff0c;金矿价值2&#xff0c;请你找出地图中最大价值的矿堆并输出该矿堆的价值 输入描述 地图元素信息如: 2…...

在PyTorch中使用CUDA, pytorch与cuda不同版本对应安装指南,查看CUDA版本,安装对应版本pytorch

目录 1 查看本机CUDA版本 2 查看对应CUDA的对应pytorch版本安装 3 用pip 安装 4 用conda安装 5 验证安装 在PyTorch中使用CUDA&#xff0c;根据你的具体环境和需求调整版本号&#xff0c;确保安装的PyTorch版本与你的CUDA版本兼容。 在PyTorch中使用CUDA&#xff0c;你需…...

copilot 产生 python工具函数并生成单元测试

stock.py 这个文件&#xff0c;我只写了注释&#xff08;的开头&#xff09;&#xff0c;大部分注释内容和函数都是copilot # split a string and extract the environment variable from it # input can be , pathabc, pathabc;pathdef, pathabc;pathdef;pathghi # output i…...

缓存与数据库双写一致性几种策略分析

一、背景 在高并发场景中&#xff0c;为防止大量请求直接访问数据库&#xff0c;缓解数据库压力&#xff0c;常用的方式一般会增加缓存层起到缓冲作用&#xff0c;减少数据库压力。引入缓存&#xff0c;就会涉及到缓存与数据库中数据如何保持一致性问题&#xff0c;本文将对几…...

Spring全家桶源码解析--2.6 Spring scope 限制bean的作用范围

文章目录 前言一、Scope是什么&#xff1f;二、Scope使用2.1 单例&#xff1a;2.1.1 单例Bean的特点如下&#xff1a;2.1.2 单例设计模式 与单例bean&#xff1a; 2.2 原型bean&#xff1a;2.2.1 原型Bean的特点&#xff1a;2.2.2 原型Bean的销毁&#xff1a; 2.3 Request bean…...

python 文本纠错库pycorrector的使用(API变更,许多介绍文章已不可用)

pycorrector是一个nice的中文检测库&#xff0c;在最新的版本API变更&#xff0c;导致许多之前的介绍文章不可用。 现将新API粘贴如下。...

【C++初阶(七)】类和对象(下)

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…...

Linux上C++通过LDAP协议使用kerberos认证AES加密连接到AD服务器

一.前言 记录自己在实现这个流程遇到的各种问题&#xff0c;因为我也是看了许多优质的文章以及组内大佬的帮助下才弄成的&#xff0c;这里推荐一个大佬的文章&#xff0c;写的非常优秀&#xff0c;比我这篇文章写得好得很多&#xff0c;最后我也是看这个大佬的代码最终才实现的…...

开源供应链管理系统 多供应商批发管理系统方案及源码输出

开发框架&#xff1a;PHPMySQL 后端框架&#xff1a;ThinkPHP 订货端&#xff1a;PC小程序 客户订货端&#xff1a;小程序 多仓库OR多供应商&#xff1a;多供应商 是否进销存&#xff1a;自带进销存 整个方案含B端订货PC、小程序端、C端小程序端下单&#xff0c;源码&…...

2yocto 自启动程序(服务)

yocto 自动运行主程序 文章目录 yocto 自动运行主程序1 问题现象2 问题分析:1)是否执行2)查看服务状态11)自动22)手动3)rc.local服务3 解决之道创建自定义服务自定义服务运行设置关系服务参考1 问题现象 系统启动后,自定义的主程序没有随着启动的起动,自动运行起来(界…...

AI 绘画 | Stable Diffusion 进阶 Embeddings(词嵌入)、LoRa(低秩适应模型)、Hypernetwork(超网络)

前言 Stable Diffusion web ui&#xff0c;除了依靠文生图&#xff08;即靠提示词生成图片&#xff09;&#xff0c;图生图&#xff08;即靠图片提示词生成图片&#xff09;外&#xff0c;这两种方式还不能满足我们所有的绘图需求&#xff0c;于是就有了 Embeddings&#xff0…...

【汇编】计算机的组成

文章目录 前言一、计算机的基本组成1.1 中央处理器&#xff08;CPU&#xff09;1.2 内存指令和数据存储的位置计算机中的存储单元计算机中的总线地址总线数据总线控制总线 1.3 输入设备和输出设备1.4 存储设备 二、计算机工作原理三、计算机的层次结构总结 前言 计算机是现代社…...

asp.net学生宿舍管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 学生宿舍管理系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 asp.net学生宿舍管理系统1 应用技…...

[C++]Leetcode17电话号码的字母组合

题目描述 解题思路&#xff1a; 这是一个深度优先遍历的题目&#xff0c;涉及到多路递归&#xff0c;下面通过画图和解析来分析这道题。 首先说到的是映射关系&#xff0c;那么我们就可以通过一个字符串数组来表示映射关系&#xff08;字符串下标访问对应着数字映射到对应的…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...