leetcode—滑动窗口

这篇具有很好参考价值的文章主要介绍了leetcode—滑动窗口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

方法:

滑动窗口

  1. 使用两个指针 表示字符串中某个子串的左右边界【i, right】
  2. 在每一步的操作中,将左指针i 向右移动一位,表示开始枚举下一个字符作为起始位置,然后不断的向右移动右指针(right),需要保证两个指针对应的子串中没有重复的字符,移动结束后,【i , right】则表示当前不包含重复字符的最长子串
class Solution {
    public int lengthOfLongestSubstring(String s) {
        // 定义哈希集合 用于记录每个字符是否出现过
        Set<Character> hs = new HashSet<>();
        // 得到字符串的长度
        int n = s.length();

        // 定义右指针 初始值为-1,相当于我们在字符串的左边界的左侧,还没有开始移动
        int right = -1;
        int ans = 0;    // 用于记录连续子串的长度

        for(int i = 0; i < n; i++){
            if(i != 0){
                // 左指针向右移动一格,移除一个字符
                hs.remove(s.charAt(i-1));
            }
            while(right + 1 < n && !hs.contains(s.charAt(right + 1))){
                // 将right+1添加到哈希集合中,不断的向右移动指针
                hs.add(s.charAt(right + 1));
                right++;
            }
            // 第i到right个字符是一个极长的无重复字符子串 +1的原因为下标从0开始
            ans = Math.max(ans,right - i + 1);
        }
        return ans;
    }
}

总结:

滑动窗口的逻辑

具体来说就是维护一个窗口,不断滑动,然后更新答案

主要代码如下:文章来源地址https://www.toymoban.com/news/detail-798660.html

    int left = 0;
    int right = 0;
    while(right < s.zize()){
        // 增大窗口
        windows.add(s[right]);
        right++;
        
        while (window needs shrink){
            // 缩小窗口
            windows.remove(s[left]);
            left++;
        }
    }

到了这里,关于leetcode—滑动窗口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode 567. 字符串的排列(滑动窗口-java)

    难度 -中等 leetcode567. 字符串的排列 给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。 换句话说,s1 的排列之一是 s2 的 子串 。 示例 1: 输入:s1 = “ab” s2 = “eidbaooo” 输出:true 解释:s2 包含 s1 的排列之一 (“ba”

    2024年02月10日
    浏览(45)
  • python - leetcode - 424. 替换后的最长重复字符【经典题解 - 贪心滑动窗口算法】

    描述: 给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。 在执行上述操作后,返回包含相同字母的最长子字符串的长度。 示例 1: 示例 2: 提示: 1 = s.length = 105 s 仅由大写英文字母组成 0 =

    2024年02月16日
    浏览(46)
  • Java【手撕滑动窗口】LeetCode 209. “长度最小子数组“, 图文详解思路分析 + 代码

    各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 📗 Java数据结构: 顺序表, 链表, 堆, 二叉树, 二叉搜索树, 哈希表等 📘 JavaEE初阶: 多线程, 网络编程, TCP/IP协议, HTTP协议

    2024年02月11日
    浏览(43)
  • Java【手撕滑动窗口】LeetCode 438. “字符串中所有异位词“, 图文详解思路分析 + 代码

    各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 📗 Java数据结构: 顺序表, 链表, 堆, 二叉树, 二叉搜索树, 哈希表等 📘 JavaEE初阶: 多线程, 网络编程, TCP/IP协议, HTTP协议

    2024年02月10日
    浏览(39)
  • Java【手撕滑动窗口】LeetCode 3. “无重复字符的最长子串“, 图文详解思路分析 + 代码

    各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 📗 Java数据结构: 顺序表, 链表, 堆, 二叉树, 二叉搜索树, 哈希表等 📘 JavaEE初阶: 多线程, 网络编程, TCP/IP协议, HTTP协议

    2024年02月11日
    浏览(39)
  • 【map】【滑动窗口】【优先队列】LeetCode480滑动窗口中位数

    动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 C++算法:滑动窗口总结 map 优先队列 中位数是有序序列最中间的那个数。如果序列的长度是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) / 2 =

    2024年02月03日
    浏览(42)
  • 255.【华为OD机试】最小矩阵宽度(滑动窗口算法-Java&Python&C++&JS实现)

    🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(JavaPythonC++JS分别实现),详细代码讲解,助你深入学习,深度掌握!

    2024年03月13日
    浏览(62)
  • 【leetcode C++】滑动窗口

    给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度 。 如果不存在符合条件的子数组,返回 0 。 . - 力扣(LeetCode) 画图 和 文字 分析 先说说有关滑动窗口的知识 滑动窗

    2024年04月09日
    浏览(50)
  • leetcode—滑动窗口

    给定一个字符串  s  ,请你找出其中不含有重复字符的  最长子串  的长度。 示例 1: 滑动窗口 使用两个指针 表示字符串中某个子串的左右边界【i, right】 在每一步的操作中,将左指针i 向右移动一位,表示开始枚举下一个字符作为起始位置,然后不断的向右移动右指针(

    2024年01月17日
    浏览(45)
  • leetcode:滑动窗口

    目录 1.定长滑动窗口 1.1 几乎唯一子数组的最大和(使用map来计数) 1.2 长度为k子数组中的最大和 2.不定长滑动窗口 2.1 最多k个重复元素的最长子数组 2.2 绝对差不超过限制的最长连续子数组(multiset) 2.3 将x减到0的最小操作数(正难则反 逆向思维) 2.4 统计最大元素出现至少k次的

    2024年02月02日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包