0%

无重复最长子串

文章字数:247,阅读全文大约需要1分钟

获取给定的字符串的不重复的最长子串的长度。

滑动窗口法

滑动窗口法是常用的字符操作算法

  1. 设定一个窗口,窗口的开端对应着数组的开关
  2. 窗口向后扩展,直到扩展到一个有重复数据
  3. 窗口的前部向后移动,到重复的元素后面。
  4. 继续延伸。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.HashMap;
import java.util.Map;

public class Solution {
public static int lengthOfLongestSubstring(String s) {
int maxLength = 0;
Map<Character, Integer> window = new HashMap();
// 0. 滑动窗口法
// 1. i 不变,j一直向后
// 2. j和i重复时 i移动到第一个重复的元素之后。(如果重复的元素在i之前就不变)
for (int i = 0, j = 0; j < s.length(); j++) {
if (window.containsKey(s.charAt(j))) {
// 防止i变小, 如 abba 的情况
i = Math.max(window.get(s.charAt(j)) + 1, i);
}
window.put(s.charAt(j), j);
int length = j - i + 1;
maxLength = Math.max(maxLength, length);
}
return maxLength;
}

public static void main(String[] args) {
System.out.println("lengthOfLongestSubstring(\"abba\") = " + lengthOfLongestSubstring("abba"));
}
}