算法分析——滑动窗口

时间:2021-08-09
本文章向大家介绍算法分析——滑动窗口,主要包括算法分析——滑动窗口使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

定义:

  一个大小可变的窗口,左右端点方向一致的移动,搜寻满足要求的数据。

使用:

  1. 在序列中使用时,首先初始化左右指针left=right=0;

  2. 不断扩大right,使得[left,right]窗口内序列满足要求;

  3. 停止增加right,转而增加left缩小窗口,直至窗口中的序列不再满足要求,每次增加left都应更新结果;

  4. 重复2,3步骤,直到right到达序列尽头;

例题:

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

题解:

 1 class Solution {
 2     public int lengthOfLongestSubstring(String s) {
 3         // 哈希集合,记录每个字符是否出现过
 4         Set<Character> occ = new HashSet<Character>();
 5         int n = s.length();
 6         int rk = 0, ans = 0;
 7         for (int i = 0; i < n; ++i) {
 8             if (i != 0) {
 9                 // 左指针向右移动一格,移除一个字符
10                 occ.remove(s.charAt(i - 1));
11             }
12             while (rk < n && !occ.contains(s.charAt(rk))) {
13                 // 不断地移动右指针
14                 occ.add(s.charAt(rk));
15                 ++rk;
16             }
17             // 第 i 到 rk 个字符是一个极长的无重复字符子串
18             ans = Math.max(ans, rk - i);
19         }
20         return ans;
21     }
22 }

原文地址:https://www.cnblogs.com/iscanghai/p/15117416.html