1. 程式人生 > 其它 >演算法分析——滑動視窗

演算法分析——滑動視窗

定義:

  一個大小可變的視窗,左右端點方向一致的移動,搜尋滿足要求的資料。

使用:

  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 }