力扣-滑动窗口

文章目录

    • 滑动窗口
    • 题目1-无重复字符的最长子串
    • 题目2-找到字符串中所有字母异位词

滑动窗口

滑动窗口是一种常用的算法技巧,适用于需要在一个数组或字符串中找出满足特定条件的连续子数组子字符串的问题。它通过维护一个窗口范围来减少重复计算,从而优化算法的时间复杂度

滑动窗口算法通常涉及两个指针,分别表示窗口的左边界右边界。窗口在数组或字符串上滑动,并在滑动过程中动态调整窗口的大小和位置,以满足特定条件。主要步骤如下:

  1. 初始化窗口边界:设置窗口的初始左边界和右边界。
  2. 移动右边界:扩大窗口的右边界,直到窗口内的元素满足特定条件。
  3. 调整左边界:当窗口内的元素满足特定条件时,尝试移动左边界以缩小窗口,同时保持窗口内的元素仍然满足条件。
  4. 记录结果:在每次窗口满足条件时,记录当前窗口的大小或内容。
  5. 重复步骤 2 和 3:直到右边界到达数组或字符串的末尾。

题目1-无重复字符的最长子串

在这里插入图片描述

第一种:【第一次接触可能第一种方法容易理解】

public class Test {public static int lengthOfLongestSubstring(String s) {Map<Character, Integer> map = new HashMap<>();char[] charArray = s.toCharArray();int left = 0, right = 0;int res = 0;while (right < charArray.length) {if (map.containsKey(charArray[right])) {map.remove(charArray[left]);left++;} else {map.put(charArray[right], 1);res = Math.max(res, right - left + 1);right++;}}return res;}public static void main(String[] args) {String s = "abcabcbb";System.out.println(lengthOfLongestSubstring(s));}
}

第二种:可以跳跃式地移动 left 指针

public class Test {public static int lengthOfLongestSubstring(String s) {Map<Character, Integer> map = new HashMap<>();char[] charArray = s.toCharArray();int left = 0, right = 0;int res = 0;for (; right < s.length(); right++) {if (map.containsKey(charArray[right])) {left = Math.max(left, map.get(charArray[right]) + 1);}map.put(charArray[right], right);res = Math.max(res, right - left + 1);}return res;}public static void main(String[] args) {String s = "abcabcbb";System.out.println(lengthOfLongestSubstring(s));}
}

题目2-找到字符串中所有字母异位词

在这里插入图片描述

第一种方法:(不建议,容易超时)
这是我第一想到的方法
在这里插入图片描述

public class Test {public static String stringSort(String s) {char[] charArray = s.toCharArray();Arrays.sort(charArray);return new String(charArray);}public static List<Integer> findAnagrams(String s, String p) {List<Integer> res = new ArrayList<>();if (s.length() < p.length()) return res;String sortedP = stringSort(p);int s_len = s.toCharArray().length;int p_len = p.toCharArray().length;int left = 0, right = 0;while (right < s_len) {if (right - left + 1 == p_len) {if (stringSort(s.substring(left, right + 1)).equals(sortedP)) {res.add(left);}left++;right++;} else {right++;}}return res;}public static void main(String[] args) {String s = "cbaebabacd", p = "abc";System.out.println(findAnagrams(s, p));}
}

第二种方法:

public class Test {public static List<Integer> findAnagrams(String s, String p) {List<Integer> res = new ArrayList<>();if (s.length() < p.length()) return res;int p_len = p.length();int s_len = s.length();int[] pCount = new int[26];for (char c : p.toCharArray()) {pCount[c - 'a']++;}int[] sCount = new int[26];for (int i = 0; i < s_len; i++) {sCount[s.charAt(i) - 'a']++;if (i >= p_len) {sCount[s.charAt(i - p_len) - 'a']--;}if (check(pCount, sCount)) {res.add(i - p_len + 1);}}return res;}private static boolean check(int[] pCount, int[] sCount) {for (int i = 0; i < 26; i++) {if (pCount[i] != sCount[i]) {return false;}}return true;}public static void main(String[] args) {String s = "cbaebabacd";String p = "abc";System.out.println(findAnagrams(s, p));}
}

❤觉得有用的可以留个关注~~❤

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

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

相关文章

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据…

金融行业专题|某头部期货基于 K8s 原生存储构建自服务数据库云平台

为了进一步提升资源交付效率&#xff0c;不少用户都将数据库应用从物理环境迁移到容器环境。而对于 Kubernetes 部署环境&#xff0c;用户不仅需要考虑数据库在性能方面的需求&#xff0c;还要为数据存储提供更安全、可靠的高可用保障。 近期&#xff0c;某头部期货机构基于 S…

PaddleOCR C++源码编译以及demo测试

Windows10下使用PaddleOCRc 1.所需要的环境 PaddleOCR 源码文件&#xff1a;https://gitee.com/paddlepaddle/PaddleOCR &#xff08;本文选择2.6https://github.com/PaddlePaddle/PaddleOCR/archive/refs/tags/v2.6.0.zip&#xff09; opencv库&#xff1a;https://opencv…

PyTorch的环境配置和安装

PyTorch环境配置及安装 初步机器学习&#xff0c;这里记录下一些学习经过&#xff0c;之后以便于自己查看&#xff0c;同时欢迎各位大佬点评&#xff0c;本节是机器计算的一个包的安装和简单验证。 安装、使用环境 Windows环境下&#xff1a;CUDA官网使用IDM下载就很快乐&am…

LeetCode11. 盛最多水的容器题解

LeetCode11. 盛最多水的容器题解 题目链接&#xff1a; https://leetcode.cn/problems/container-with-most-water 示例 思路 暴力解法 定住一个柱子不动&#xff0c;然后用其他柱子与其围住面积&#xff0c;取最大值。 代码如下&#xff1a; public int maxArea1(int[]…

AI儿童绘本创作

之前分享过AI儿童绘画的项目&#xff0c;但是主要问题是角色一致要花费很长的时间&#xff01; 今天发现了这款&#xff0c;非常奈斯&#xff01; 只需输入故事主题、风格、模板&#xff0c;软件就会自动创作故事内容&#xff0c;自动生成插画配图&#xff0c;自动根据模板生…

Spring Bean自动装配:深入解析与实战应用

何为自动装配 在使用Spring框架配置bean时&#xff0c;我们通常需要为bean的属性设置值。如果不手动设置这些值&#xff0c;它们通常会被初始化为默认值&#xff08;对于对象类型通常是null&#xff0c;对于基本类型如int则是0&#xff0c;boolean是false等&#xff09;。自动…

(超详细)YOLOV7改进-Soft-NMS(支持多种IoU变种选择)

1.在until/general.py文件最后加上下面代码 2.在general.py里面找到这代码&#xff0c;修改这两个地方 3.之后直接运行即可

网页设计软件Bootstrap Studio6.7.1

Bootstrap Studio是一个适用于Windows的程序,允许您使用流行的fre***orca Bootstrap创建和原型网站。您可以将现成的组件拖动到工作区并直观地自定义它们。该程序生成干净和语义的PDF、CSS和JS代码,所有Web浏览器都支持这些代码。 Bootstrap Studio有一个漂亮而强大的界面,它…

DataWorks重磅推出全新资源组2.0,实现低成本灵活付费和动态平滑扩缩容

背景简介 DataWorks资源组为DataWorks上的各个功能模块提供计算资源&#xff0c;属于付费服务。 资源组属于DataWorks的基础组件&#xff0c;是客户正常使用DataWorks的前提。 资源组直接影响到相关功能是否正常运行&#xff0c;以及运行的效率和稳定性。 此前DataWorks资源…

ImportError: attempted relative import beyond top-level package报错,解决方法

1.如下图所示&#xff0c;在conftest.py页面采用相对路径去引用包&#xff0c;运行提示报错信息 目录结构: D:. ├─common ├─config ├─image ├─logFile ├─page │ └─basePage.py └─test_cases└─conftest.py从目录结构中我们可以看到conftest.py文件和basePage…

如何免费的去使用connectedpapers?

免费使用connectedpapers 1. 打开谷歌浏览器2. 按住ctrlshiftN,进入无痕模式3. 不需要登录&#xff08;也就是访客模式&#xff09;4. 两次用完&#xff0c;关闭无痕模式&#xff08;继续重复步骤 2 - 4&#xff09; 1. 打开谷歌浏览器 2. 按住ctrlshiftN,进入无痕模式 输入网…

使用Github API获取排名

看到有人使用Github 提供的API做了GitHub rank的网站&#xff0c;由于以前没有使用过Github的API&#xff0c;所以打算自己动手尝试一下。在线效果 1. Token 生成 使用API前需要先申请开发者Token&#xff0c;在Settings --> Developer settings --> Personal access t…

对的礼物送给对的人,送礼物的技巧和学问

一、教程描述 无论是商务往来&#xff0c;还是求人办事&#xff0c;送礼都是不可或缺的一种交际手段。想要建立好的人脉关系网&#xff0c;想要把事儿办成&#xff0c;一定要把对的礼物送给对的人&#xff0c;否则必是竹篮打水一场空。送礼是一门学问&#xff0c;同时&#xf…

使用babel将es6语法进行转换es2015

使用babel将es6语法进行转换es2015 1、npm初始化 npm init -y2、全局安装babel-cli 和 browserify npm i babel-cli browserify -g3、项目根目录下执行 npm i babel-preset-es2015 --save-dev4、项目根目录下新建.babelrc {"presets": ["es2015"] }5、…

【C语言】函数执行背后的秘密:函数栈帧的创建和销毁超详解

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1. 什么是函数栈帧 2. 理解函数栈帧能解决什么问题呢&#xff1f; 3. 函数栈帧的创建和销毁解析 3.1 什么是栈&#xff1f; 3.2 认识相关寄存器和汇编指…

讨论顺序表

讨论顺序表 C中的vector模拟实现成员变量尾插数据push_back扩容reserve 构造函数和析构函数拷贝构造函数指定位置插入数据指定位置删除数据迭代器失效完整代码 C中&#xff0c;vector是可以改变大小的数组的序列容器。可以看做底层就是一个数组&#xff0c;容量满时扩容。 C中的…

Android集成高德地图SDK(1)

1.新建Android应用&#xff0c;确定应用包名 2.注册高德开放平台&#xff0c;打开控制台页面&#xff0c;应用管理&#xff0c;我的应用&#xff0c;创建新应用 3.添加Key 4.获取SHA1码 找到Android Studio自带的keytool 将其拖到cmd中&#xff0c;输入命令 -v -list -keystor…

【单片机毕业设计选题24024】-房间自动除湿控制系统

系统功能: 系统分为手动和自动模式&#xff0c;上电默认为自动模式。自动模式下如果获取到湿度 值大于设定的湿度值则自动打开风扇&#xff0c;手动模式下手动开关风扇。 系统上电后显示“欢迎使用除湿控制系统请稍后”&#xff0c;两秒钟后进入主页面显示。 第一行显示系统…

Python-矩阵元素定位

[题目描述] 小理得到了一个 n 行 m 列的矩阵&#xff0c;现在他想知道第 x 行第 y 列的值是多少&#xff0c;请你帮助他完成这个任务。输入格式&#xff1a; 第一行包含两个数 n 和m &#xff0c;表示这个矩阵包含 n行 m 列。从第 2 行到第 n1 行&#xff0c;每行输入 m 个整数…