首页 > 编程语言 >滑动窗口算法(Sliding Window Algorithm)

滑动窗口算法(Sliding Window Algorithm)

时间:2024-03-30 18:33:51浏览次数:27  
标签:right 窗口 Algorithm max Window 算法 str 滑动 Sliding

滑动窗口的核心就是,右指针给窗口扩容,直至抵达扩容限制条件或抵达边界;左指针则是给窗口缩容,以释放限制条件的约束,保证窗口继续向边界移动。

需求讲解

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

public static int lengthOfLongestSubstring(String str) {
    // 记录窗口内字符
    Set<Character> set = new HashSet<>();
    int max = 0; // 最长不重复字符子串的长度
    int left = 0, right = 0; // 滑动窗口的左右边界

    while (right < str.length()) {
        char c = str.charAt(right);
        // 如果字符在窗口内出现过,则滑动左边界
        while (set.contains(c)) {
            set.remove(str.charAt(left));
            left++;
        }
        // 将字符加入窗口
        set.add(c);
        // 更新最大长度
        max = Math.max(max, right - left + 1);
        // 右边界右移
        right++;
    }
    return max;
}

 此算法通常应用此类场景:在大区间,寻找(满足某种特征的)小区间结果。比如:

数组中的最大/最小子序列问题

例如,“最大连续子数组和”,“最小覆盖子串”等。这些问题通常需要找出数组或字符串中的一段连续子区间,使其满足某种条件(如和最大或最小,或者包含所有指定字符等)。

计数类问题

例如,“和为K的子数组个数”,“所有字母异位词”等。这类问题需要统计满足特定条件的子数组或子字符串的数量。

字符串匹配问题

例如,“KMP算法”,“Boyer-Moore算法”等。这类问题需要在字符串中找到指定模式的所有出现位置。

其他

滑动窗口算法还可以用于解决一些其他问题,例如:

  • 寻找最长公共子串
  • 寻找最长上升子序列
  • 寻找最长回文子串
  • 计算滑动平均值

滑动窗口算法的优点在于,它可以将这些看似复杂的问题转化为线性复杂度,大大提高了算法的运行效率。

以下是一些具体的应用案例:

  • 在网络协议中,滑动窗口算法可以用于流量控制和拥塞控制。
  • 在数据库中,滑动窗口算法可以用于查询优化。
  • 在机器学习中,滑动窗口算法可以用于特征提取。

标签:right,窗口,Algorithm,max,Window,算法,str,滑动,Sliding
From: https://www.cnblogs.com/ashet/p/18105846

相关文章

  • Acunetix v24.3 (Linux, Windows) - Web 应用程序安全测试
    Acunetixv24.3(Linux,Windows)-Web应用程序安全测试Acunetix|WebApplicationSecurityScanner请访问原文链接:https://sysin.org/blog/acunetix/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org重要提示AcunetixPremium现在使用日历化版本命名。请注意,从......
  • 【快速解决】使用python图形库,禁止用户拉伸收缩界面,使用tkinter中的window.resizable(
    目录简单介绍1.window.resizable()方法2.参数取值说明3.控制效果4.使用场景示例代码解释展示使用前后的样子 使用前使用后结语简单介绍当你在使用Python的tkinter库创建GUI(图形用户界面)应用程序时,可以使用window.resizable(False,False)技术来控制窗口是......
  • Windows12安装Docker
    环境及工具(文末提供)DockerDesktopInstaller.exe(官网)一、查看windows相关配置查看是否开启相应的功能,如果没有需要开启,然后重启电脑打开任务管理器(CTRL+SHIFT+ESC)->选择性能->CPU->虚拟化,确认是否已启用二、开始安装(我这边已经安装完成)三、可能遇到的问题St......
  • windows下socket客户端编程示例
    #include<iostream>#include<winsock2.h>#include<ws2tcpip.h>#include<windows.h>#pragmacomment(lib,"Ws2_32.lib")intsocket_client_demo(char*addr,intport){ charrecvbuf[1024]={0}; intretVal=-1;#......
  • 浅谈Windows发展史
    简介从微软发布Windows1.0开始,到现在已经有快40年历史了,接下来让我们浅浅的谈一下微软的发展史(只记录大家都知道的)Windows1.0Windows1.0是微软于1985年11月20日发布的操作系统,这也是微软第一个图形化操作系统。基本的功能也是有了。Windows2.0Windows2.0是微软于1987......
  • 虚拟机安装windows2000
    简介Windows2000是第一个被广泛家庭使用的基于NT的系统(其实原来2000是给公司和服务器用的,家用的是me,当时微软可能压根没想把家用电脑的内核改成NT),其稳定性高,不像me容易蓝屏,原因就是内核不同,me基于dos,2000基于NT,原来NT是给服务器用的,但是me稳定性太差,导致大部分人都用2000,是微......
  • CrossOver2024最新免费版虚拟机软件 Mac和Linux系统上运行Windows 应用/游戏 CrossOve
    CrossOver是一款由CodeWeavers公司开发的,运行在Mac和Linux操作系统下,能够模拟Windows系统应用运行环境的软件。它不需要用户单独安装Windows操作系统,就能让Windows平台上的应用程序在Mac和Linux上顺畅运行。CrossOver在技术上使用了Wine(Windows模拟器)的代码,通过提供一个兼容层,......
  • Linux中远程连接Windows远程桌面(3389)相关命令总结
    在做Windows靶机时,一般靶机开放着3389端口,Linux中有很多工具,这里总结一下经常使用的,这里会使用到三个工具rdesktopxfreerdpremminardekstop在kali中自带这个命令,如果没有可以使用aptinstallrdesktop安装。常用的连接命令如下rdesktop-uhacker-p123456-rclipboar......
  • windows下nginx-rtmp-module的编译方法
    ForewordLinux为当前nginx添加rtmp模块非常的方便,sudo./configure--add-module+sudomake就完事儿了,但是windows比较复杂,没有包管理器,所以各个模块的源码要自己找,下面是我在windows11下的nginxwithrtmpmodule的编译记录。编译器工具链大概有msvctoolchain,perl......
  • ktpass命令是Windows Server上的一个命令行工具,用于创建和管理Kerberos密钥表(Keytab)
    ktpass命令是WindowsServer上的一个命令行工具,用于创建和管理Kerberos密钥表(Keytab)。它允许管理员将用户帐户或服务帐户的凭据导出到一个可由其他系统使用的文件中,以便进行身份验证和授权。这个工具通常用于在Windows和Unix/Linux系统之间建立单点登录(SSO)的集成。通过ktpass命......