leetcode——滑动窗口题目汇总

本章总结一下滑动窗口的解题思路:

  • 在字符串中使用双指针 left right 围成的一个左闭右开的区域作为一个窗口。
  • 不断将 right 向右滑动,直到窗口中的字符串符合条件。
  • 此时将 left 向右滑动,直到窗口中的字符串不符合条件,期间需不断的更新结果。
  • 最后重复前两步,直到 right 指针达到尽头。

需要的变量:

  • 需要维护两个map数组,needwindow,分别记录所需要的字符及个数,和滑动窗口中的字符及个数。
  • 左右指针left 和 right ,分别初始化为0。
  • valid 用于记录窗口中符合条件的字符数,初始化为0。

leetcode76、最小覆盖子串

        java代码如下: 

class Solution {public String minWindow(String s, String t) {HashMap<Character,Integer> need = new HashMap<>(); //所需要的字符及个数HashMap<Character,Integer> window = new HashMap<>(); //滑动窗口内的符合need的字符及个数//滑动窗口的左右指针int left = 0, right = 0;int valid = 0;for(char c : t.toCharArray()){need.put(c,need.getOrDefault(c,0)+1);}//最小覆盖子串的起始索引及长度int start = 0, len = Integer.MAX_VALUE;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 < len){start = left;len = right - left;}char d = s.charAt(left);//左移窗口left++;//更新窗口数据if(need.containsKey(d)){if(window.get(d).equals(need.get(d))){valid--;}window.put(d,window.get(d)-1);}}}if(len == Integer.MAX_VALUE) return "";return s.substring(start,start+len);}
}

leetcode438、找到字符串中所有字母异位词

        除了判断窗口是否要收缩的代码不一样,其他基本都一样,代码如下:

class Solution {public List<Integer> findAnagrams(String s, String p) {Map<Character,Integer> need = new HashMap<>();Map<Character,Integer> window = new HashMap<>();int left = 0, right = 0;int valid = 0;List<Integer> ans = new ArrayList<>();for(Character c : p.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(right - left >= p.length()){if(valid == need.size()){ans.add(left);}char d = s.charAt(left);left++;if(need.containsKey(d)){if(window.get(d).equals(need.get(d))){valid--;}window.put(d,window.get(d)-1);}}}return ans;}
}

leetcode3、无重复字符的最长子串

 

        本题不需要 need,并且判断是否收缩的代码逻辑为:当前窗口是否存在重复字符。 java代码如下:

class Solution {public int lengthOfLongestSubstring(String s) {Map<Character,Integer> window = new HashMap<>();int left = 0, right = 0;int ans = 0;while(right < s.length()){char c = s.charAt(right);right++;window.put(c,window.getOrDefault(c,0)+1);//当出现重复字符,窗口收缩while(window.get(c) > 1){char d = s.charAt(left);left++;window.put(d,window.get(d)-1);}ans = Math.max(ans, right-left);}return ans;}
}

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

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

相关文章

Django中的SQL注入攻击防御策略

Django中的SQL注入攻击防御策略 SQL注入是一种常见的网络安全威胁&#xff0c;可以导致数据库被非法访问和数据泄露。本文将介绍在Django框架中防止SQL注入攻击的关键方法&#xff0c;包括使用参数化查询、使用ORM、进行输入验证和使用安全的编码实践。 SQL注入是一种利用应用程…

SpringBoot:多环境配置

多环境配置demo代码&#xff1a;点击查看LearnSpringBoot02 点击查看更多的SpringBoot教程 方式一、多个properties文件配置 注意&#xff1a;创建properties文件,命名规则&#xff1a;application-&#xff08;环境名称&#xff09; 示例&#xff1a;application-dev.proper…

U3D记录之FBX纹理丢失问题

今天费老大劲从blender建了个模型&#xff0c;然后导出进去unity 发现贴图丢失 上网查了一下 首先blender导出要改设置 这个path mode要copy 然后unity加载纹理也要改设置 这里这个模型的纹理load要改成external那个模式 然后就有了&#xff0c;另外这个导出还有好多选项可…

Java项目maven打包的包名设置(finalname标签的使用)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

C#用Array类的Reverse方法反转数组中元素

目录 一、Array.Reverse 方法 1.重载 2.Reverse(Array, Int32, Int32) 3. Reverse(Array) 4.Reverse(T[]) 5. Reverse(T[], Int32, Int32) 二、实例 1.Array.Reverse 方法4种重载方法综合实例 2.Reverse(Array)方法的实例 一、Array.Reverse 方法 反转一维 Array 或部…

wireshark分析数据包:追踪流

打开追踪流的界面 方法 1 方法 2 选中数据包&#xff0c;右键弹出菜单 说明&#xff1a; 流内容的显示顺序和它在网络上出现的顺序相同。不可打印的字符被点代替。从客户端到服务器的流量被标记为红色&#xff0c;而从服务器到客户端的流量被标记为蓝色。这些颜色可以通过下…

numpy基础之transpose

1 numpy基础之transpose 用法 ndarray.transpose(*axes)描述 根据axes将ndarray数组进行转置。 入参 axes&#xff1a;可选&#xff0c;元组或列表。若指定&#xff0c;则元素个数必须为数组轴大小(ndarray.ndim)&#xff0c;元素值的范围为[0,1,2,…,ndarray.ndim-1]&…

R语言rmarkdown使用

1、安装 install.packages(rmarkdown) library(rmarkdown) install.packages(tinytex) tinytex::install_tinytex() 2、新建R Markdown 3、基本框架 红色框内为YAML&#xff1a;包括标题、作者和日期等 黄色框内为代码块&#xff1a;执行后面的代码&#xff0c;并可以设置展…

适用于 Windows 的 6 款 iPhone 数据恢复软件

数据恢复 已经取得了长足的进步。从仅提供恢复数据的可能性到保证数据恢复&#xff0c;有许多适用于 Windows的第三方 iPhone 数据恢复软件。 大多数软件都是高级工具&#xff0c;但是提供了出色的数据恢复解决方案。从iPhone恢复数据非常简单。 只需将 iPhone 连接到您的计算…

11 串口发送应用之使用状态机实现多字节数据发送

1. 使用串口发送5个字节数据到电脑 uart协议规定&#xff0c;发送的数据位只能是6&#xff0c;7&#xff0c;8位&#xff0c;如果数据位不符合&#xff0c;接收者接收不到数据。所以我们需要将40位数据data分为5个字节数据分别发送&#xff0c;那么接收者就能通过uart协议接收…

qt/c++实现拓扑排序可视化

&#x1f482; 个人主页:pp不会算法^ v ^ &#x1f91f; 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 &#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 实现功能 1、选择文件导入初始数据 2、逐步演示 3、排序完成输出…

多线程基础详解(看到就是赚到)

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 创建线程 1.创建类继承Thread,重写run() 2.实现Runnable,重写run() 3.继承Thread,使用匿名内部类 …

问题:A注册会计师必须在期中实施实质性程序的情形是()。 #学习方法#其他

问题&#xff1a;A注册会计师必须在期中实施实质性程序的情形是&#xff08;&#xff09;。 A&#xff0e;甲公司整体控制环境不佳 B&#xff0e;将期中实质性程序所获证据与期末数据进行比较 C&#xff0e;评估的认定层次重大错报风险很高 D&#xff0e;没有把握通过在期中…

Linux 36.2@Jetson Orin Nano基础环境构建

Linux 36.2Jetson Orin Nano基础环境构建 1. 源由2. 步骤2.1 安装NVIDIA Jetson Linux 36.2系统2.2 必备软件安装2.3 基本远程环境2.3.1 远程ssh登录2.3.2 samba局域网2.3.3 VNC远程登录 2.4 开发环境安装 3. 总结 1. 源由 现在流行什么&#xff0c;也跟风来么一个一篇。当然&…

C++自定义函数详解

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 铁汁们新年好呀&#xff0c;今天我们来了解自定义函数。 文章目录 1.数学中的函数 2.什么是自定义函数 3.自定义函数如何使用&#xff1f; 4.值传递和引用传递&#xff08;形参和实参区分&#xff09; …

Spring Boot项目Jar包加密:防止反编译的安全实践

文章目录 1. 引言2. 背景3. Jar包加密方案3.1 使用Java混淆工具3.2 使用Jar包加密工具3.2.1 示例&#xff1a;使用JCryptor对Jar包进行加密 4. 加密后的Jar包的运行5. 安全性与性能考虑5.1 安全性考虑5.2 性能考虑 6. 拓展功能与未来展望6.1 数字签名与验签6.2 使用加密算法库 …

代码随想录算法训练营第四十五天(动态规划篇)|01背包

01背包理论基础 学习资料&#xff1a;代码随想录 (programmercarl.com) 相关链接&#xff1a;题目页面 (kamacoder.com) 背包题目分类 01背包定义 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次…

企业飞书应用机器人,使用python自动发送文字内容到群消息

文章目录 创建企业应用与开通机器人飞书发送信息的工具函数 创建企业应用与开通机器人 需要先创建应用&#xff0c;然后进入应用后&#xff0c;点击添加应用能力创建机器人&#xff1a; 参考官方文档&#xff0c;获取两个参数&#xff1a;app_id与app_secret 官方说明文档&…

【DC渗透系列】DC-4靶场

主机发现 arp-scan -l┌──(root㉿kali)-[~] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:6b:ed:27, IPv4: 192.168.100.251 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.100.1 00:50:56:c0:00:08 …

电力负荷预测 | 基于AE-LSTM的电力负荷预测(Python)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力负荷预测 | 基于AE-LSTM的电力负荷预测(Python) 基于AE-LSTM(自动编码器长短期记忆网络)的电力负荷预测是一种基于深度学习的方法,用于预测未来一段时间内的电力负荷需求。该方法结合了自动编码器和LSTM网…