秋招力扣Hot100刷题总结——滑动窗口

news2024/11/22 21:17:07

1. 无重复字符的最长子串(手撕频率非常高)

  • 题目要求:给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。
    在这里插入图片描述

  • 代码及思路

    • 使用一个hashmap维护已经出现过的字符
    • 遍历字符串,当字符已经存在时,根据其上一次出现位置与左边界位置大小比较更新左边界
    • 每一次遍历的时候都更新hashm,并且更新最大子串的长度(右边界-左边界+1)
    • 代码
public class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s.length()<2)return s.length();
        int res=0;
        Map<Character,Integer> cache=new HashMap<>();
        int left=0;
        int right=0;
        while(right<s.length()){
            if(cache.containsKey(s.charAt(right))){
                if(cache.get(s.charAt(right))>=left){
                    left=cache.get(s.charAt(right))+1; 
                }
            }
            cache.put(s.charAt(right),right);
            res=Math.max(res,right-left+1);  
            right++;
        }
        return res;
    }
} 

2. 找到字符串中所有字母异位词

  • 题目要求:给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
    异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
    在这里插入图片描述
  • 代码及思路
    • 使用滑动窗口在s字符串中寻找,滑动窗口大小为p字符串的长度
    • 因为是找异位词,因此s的子串和p字符串排序后得到的新字符串应该是相等的(注意:字符串相等不能使用==,要使用equals函数)
    • 代码
class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        List<Integer> res=new ArrayList<>();
        if(p.length()>s.length())return res;
        char[] pp=p.toCharArray();
        Arrays.sort(pp);
        String sortp=new String(pp);
        int l=p.length();
        for(int i=0;i<=s.length()-l;i++){
            String temp=s.substring(i,i+l);
            char[] tempp=temp.toCharArray();
            Arrays.sort(tempp);
            String sortemp=new String(tempp);
            if(sortemp.equals(sortp))res.add(i);
        }
        return res;
    }
}

3. 最小覆盖子串 题目链接

  • 题目要求:给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。
    注意:
    对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。
    如果 s 中存在这样的子串,我们保证它是唯一的答案。
    在这里插入图片描述
  • 代码及思路
    • 用一个哈希表needs存储t字符串中所有的字符及其对应的数量
    • 用一个哈希表windows存储遍历s字符串时的和t中字符匹配的字符及其对应的数量
    • 当windows中字符数量等于needs中对应数量时,计数加1;当计数等于needs的size时表示当前子串已经能够覆盖t,现在需要循环删除最左边不影响覆盖的字符
    • 在删除左边字符时更新最短子串长度
    • 代码
class Solution {
    public String minWindow(String s, String t) {
        Map<Character,Integer> needs=new HashMap<>();
        Map<Character,Integer> windows=new HashMap<>();
        for(int i=0;i<t.length();i++){
            needs.put(t.charAt(i),needs.getOrDefault(t.charAt(i),0)+1);
        }
        int left=0;
        int right=0;
        int finalleft=0;
        int finalright=0;
        int num=0;
        int minL=Integer.MAX_VALUE;
        while(right<s.length()){
            char c=s.charAt(right);
            if(needs.containsKey(c)){
                windows.put(c,windows.getOrDefault(c,0)+1);
                if(windows.get(c).equals(needs.get(c))){
                    num++;
                }
            }
            right++;
            while(num==needs.size()){
                int tempL=right-left;
                if(tempL<minL){
                    finalleft=left;
                    finalright=right;
                    minL=tempL;
                }
                char cc=s.charAt(left);
                if(needs.containsKey(cc)){
                    windows.put(cc,windows.get(cc)-1);
                    if(windows.get(cc)<needs.get(cc)){
                        num--;
                    }
                }
                left++;
            }
        }
        if(minL==Integer.MAX_VALUE)return "";
        return s.substring(finalleft,finalright);
    }
}

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

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

相关文章

微服务实战系列之玩转Docker(十二)

前言 山一程&#xff0c;水一程&#xff0c;身向榆关那畔行&#xff0c;夜深千帐灯。——清纳兰性德 最近偶读纳兰的《长相思》经典之作&#xff0c;被这个“行军”场面震撼了。长长的队伍&#xff0c;跋山涉水&#xff0c;野宿一处。夜深人静的时候&#xff0c;突然激发了纳兰…

CSS3页面布局-三栏-固定宽度布局

布局的基本概念 多栏布局三种基本实现方案&#xff1a;固定宽度&#xff0c;流动&#xff0c;弹性。 固定宽度布局&#xff1a;大小不会随用户调整浏览器窗口大小。 一版960-1100,960常见&#xff0c;可以被3,4,5,6,8,10,12,16整除。 流动布局&#xff1a;大小会随用户调整…

芯片要火不要“热”!仿真技术助力芯片热设计

芯片散热仿真好比一场微观世界里的“清凉大作战”&#xff01; 想象一下&#xff0c;小小的芯片就像迷你城市&#xff0c;无数的电子如同居民在其中穿梭。当芯片高速运转&#xff0c;就像城市进入了狂欢&#xff0c;热闹非凡但也会产生大量的热量。 而芯片散热仿真用数字和算法…

OpenStack前置配置与安装

环境&#xff1a;CentOS8最小化安装 九大组件&#xff1a; Nova:提供计算资源&#xff0c;cpu、内存等 Glance:提供镜像&#xff08;查找&#xff09;能力&#xff0c;真正存放镜像的是后端Swift。 Swift:对象存储&#xff0c;可以用来存放镜像。还可以用来存储备份。 Cin…

java生成黄红封面

import java.awt.*; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO;public class CoverGenerator {public static void generateCover(String name, String outputPath) {// A4纸的分辨率 (300 …

POJO、PO、DTO、VO、BO到底是什么?都如何使用?(基础概念+传输示意图+示例代码)带你一次玩转层出不穷的Object

文章目录 前言一、解释关系二、POJO、PO、DTO、VO、DAO、BO1.什么是POJO&#xff08;Plain Old Java Object&#xff09;2.什么是PO&#xff08;Persistent Object&#xff09;3.什么是DTO&#xff08;Data Transfer Object&#xff09;4.什么是VO&#xff08;View Object&…

缓冲区

原理 #include <stdio.h> #include <string.h> int main() { const char *msg0"hello printf\n"; const char *msg1"hello fwrite\n"; const char *msg2"hello write\n"; printf("%s", msg0); fwrite(msg1, strlen(msg0)…

MySQL 数据页详解

数据页是MySQL 中定义的的一个存储结构 数据页是保存数据行的容器 页的16KB的大小是MySQL的⼀个默认设置&#xff0c;可以适用于⼤多数场景&#xff0c;当然也可以根据自己的实际业务场景进行修改页的大小&#xff0c;通过系统变量 innodb_page_size 进行调整与查看&#xff…

可计量Agilent N5181A详情资料keysight N5182A模拟信号发生器

Keysight N5181A&#xff08;Agilent&#xff09;MXG RF 模拟信号发生器的功能和规格包括&#xff1a;信号特性&#xff1a; 100 kHz 至 1、3 或 6 GHz 1 GHz 时输出功率为 23 dBm -121 dBc/Hz&#xff08;典型值&#xff09;相位噪声&#xff08;1 GHz 和 20 kHz 偏移&…

程序员常用的十个PyCharm插件,学会工作都不用加班了!

安装方法 先来说说插件的安装方法&#xff0c;一点都不难。 选择顶部菜单栏的 PyCharm 选项&#xff0c;打开 Preferences &#xff0c;点击 plugins &#xff0c;在右侧的文本框中输入想要查看的插件名称&#xff0c;在下方就会罗列出已经安装的相关的插件。 找到我们所需要的…

虹猫ai推文软件官方

虹猫AI推文软件是一款由虹猫小队开发的人工智能推文工具。该软件通过训练深度学习模型&#xff0c;能够自动生成优质的推文内容&#xff0c;帮助用户快速撰写出吸引人的推文。 虹猫ai推文软件官方https://iimenvrieak.feishu.cn/docx/O0UedptjbonN4UxyEy7cPlZknYc 虹猫AI推文软…

在Windows下安装设置VirtualBox

文章目录 一、下载VirtualBox二、安装VirtualBox三、安装虚拟机 一、下载VirtualBox 下载地址 直链下载 二、安装VirtualBox 打开下载好的安装包&#xff0c;点击下一步 根据自己的需求选择安装功能&#xff0c;之后选择安装目录&#xff0c;完成后下一步 提前注意是否有…

棚子影院CMS程序PHP源码

01, 棚子影视是我现在最常用的一个看视频的网站&#xff0c;支持观看电影、国漫&#xff01;动漫&#xff0c;电视剧、综艺、记录片、香港剧等等。同时棚子影视支持手机&#xff0c;PC端在线观看&#xff0c;不用下载任何播放器&#xff0c;直接电脑或者手机打开网址就可以在线…

自动化脚本到LabVIEW转换

工业自动化领域中的专用脚本语言转换为LabVIEW时需要注意的问题 语法差异&#xff1a; 脚本语言特点&#xff1a; 工业自动化脚本语言通常具有特定的语法和结构&#xff0c;例如条件判断、循环控制、硬件指令等。这些语言直接面向硬件操作&#xff0c;语法简洁&#xff0c;适用…

Python编码系列—Python单元测试的艺术:深入探索unittest与pytest

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

[数据集][目标检测]考场行为作弊检测数据集VOC+YOLO格式4413张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4413 标注数量(xml文件个数)&#xff1a;4413 标注数量(txt文件个数)&#xff1a;4413 标注…

LeetCode33

445.两数相加Ⅱ 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数字都不会以零开头。 示例1&#xff1a; 输入&#xff1a;l1 [7,2,4,3…

SD Maid SE v1.2.3 — 老牌清理工具全面升级,更简洁,更流畅了

SD Maid&#xff08;SD女佣&#xff09;是一款老牌的安卓垃圾清理神器&#xff0c;支持手机文件概览、文件搜索、应用管理、卸载残留、系统清理、应用清理、重复文件以及存储分析等多种实用功能。近期推出的SD Maid SE采用了全新的架构和技术&#xff0c;全面兼容最新的安卓版本…

如何高效利用ChatGPT撰写论文:从初稿到终稿的全程精华指南

在近年来的人工智能快速发展中&#xff0c;自然语言处理领域尤其显著&#xff0c;其中ChatGPT作为OpenAI推出的先进语言模型&#xff0c;不仅在日常交互上表现出众&#xff0c;其在专业写作方面也展现了巨大潜力。本文将详尽介绍如何高效地利用ChatGPT来撰写和修改学术论文&…

【Linux篇】Linux命令基础

目录 1. Linux的目录结构 1.1 Linux的目录结构 1.2 /在Linux系统中的表示 2. linux命令基础 2.1 什么是命令和命令行 2.2 Linux命令的通用格式 2.3 ls命令 2.3.1 ls命令的参数的作用&#xff1a; 2.3.2 ls命令的选项 2.3.3 命令的选项组合使用 2.4 cd切换工作目录 2…