力扣-滑动窗口

文章目录

    • 滑动窗口
    • 题目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,一经查实,立即删除!

相关文章

计算机硬件的组成与功能详解

目录 1. 组成要素 2. 运算器 运算器的组成 运算器的运作方式 3. 存储器 1. 随机存取存储器&#xff08;RAM, Random Access Memory&#xff09; 2. 只读存储器&#xff08;ROM, Read-Only Memory&#xff09; 3. 缓存&#xff08;Cache&#xff09; 4. 辅助存储器&…

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

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

【EF Core】两种使用模式(Code First、Database First)

文章目录 Code FirstDatabase FirstCode First 示例安装 Entity Framework Core创建模型创建数据库创建、读取、更新和删除 Database First 示例1. 使用Scaffold-DbContext命令生成代码&#xff08;通常在Package Manager Console中执行&#xff09;2. 生成的代码类似于Code Fi…

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

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

新手摄影技巧总结

拍摄好看的照片不仅仅依赖于相机的硬件配置&#xff0c;还需要掌握一些基本的摄影技巧和相机设置。以下是一些建议&#xff0c;帮助你利用佳能EOS R62拍出更好看的照片&#xff1a; 1. 了解相机设置 模式选择&#xff1a;学习使用不同的拍摄模式&#xff08;如光圈优先、快门…

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[]…

flex布局学习笔记(flex布局教程)

前端笔试⾯试经常会问到:不定宽⾼如何⽔平垂直居中。最简单的实现⽅法就是flex布局,⽗元素加上如下代码即 可: display: flex; justify-content: center; align-items :center; 。下⾯详细介绍下flex布局吧。 2009年,W3C提出了 Flex布局,可以简便⼂完整⼂响应式地实现各种…

AI儿童绘本创作

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

mysql问题Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT)

show table status from oa SELECT TABLE_SCHEMA 数据库, TABLE_NAME 表, COLUMN_NAME 字段, CHARACTER_SET_NAME 原字符集, COLLATION_NAME 原排序规则, CONCAT( ALTER TABLE , TABLE_SCHEMA, ., TABLE_NAME, MODIFY COLUMN , COLUMN_NAME, , COLUMN_TYPE, CH…

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

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

hevc和H.264格式的区别

HEVC&#xff08;High Efficiency Video Coding&#xff09;和H.264&#xff08;也称为Advanced Video Coding&#xff0c;AVC&#xff09;都是视频压缩标准&#xff0c;但它们之间存在一些显著的区别&#xff0c;主要集中在压缩效率、资源需求和兼容性方面。 压缩效率 HEVC&am…

python2进制移位>>><<<

1.右移动 对于正数&#xff0c;右边舍弃&#xff0c;左边补零 对于负数&#xff0c;右边舍弃&#xff0c;左边补1 2.左移动<< 运算符将一个数的二 进制位向左移动指定的位数&#xff0c;右边用 0 填充。例如&#xff0c;将数字 5&#xff08;二进制表示为 101&#xf…

Gitee的基本使用方法和基本用法

Gitee是一个类似于GitHub的代码托管和协作平台&#xff0c;用于管理、分享和合作开发项目。下面是Gitee的使用方法和基本用法&#xff1a; 注册和登录&#xff1a; 首先&#xff0c;你需要在Gitee上注册一个账号。注册完成后&#xff0c;使用你的账号登录。 创建仓库&#xff…

(超详细)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…

IDM下载管理器的优势分析:为什么选择IDM?

在互联网日益普及的今天,下载管理器成为了我们日常生活中必不可少的工具。无论是下载软件、音乐、视频,还是大文件,下载管理器都能大大提升效率和体验。IDM(Internet Download Manager)作为全球范围内广受欢迎的下载管理器之一,凭借其出色的功能和性能,赢得了广大用户的…