Longest Substring Without Repeating Characters

题目描述:

1
2
3
4
5
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb", the answer is "abc", which the length is 3.
Given "bbbbb", the answer is "b", with the length of 1.
Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequenceand not a substring.

用滑动窗口来解决这个问题
由输入的字符串可以知道该字符串的长度(length)
设置两个指针,分别为left和right,同时设置最大子字符串长度为max
然后开始while循环,条件为left和right都小于length
利用数据结构set来存储目前的窗口
right指针向右移动,如果对应的char在set中不存在,那么就把该char加入到set中,同时记录下当时set中元素的个数,并与max对比,取最大值重新保存为max。如果set中有该char,那么就移动left,直到right指针对应的char在set中不存在为止。
现在max的值就是最大子字符串的长度

java代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Solution {
public int lengthOfLongestSubstring(String s) {
int length = s.length();
Set<Character> set = new HashSet<>();
int max = 0, i=0, j=0;
while (i<length && j<length) {
if (!set.contains(s.charAt(j))) {
set.add(s.charAt(j++));
max = Math.max(max, j-i);
} else {
set.remove(s.charAt(i++));
}
}
return max;
}
}

坚持原创技术分享,您的支持将鼓励我继续创作!攒点碎银娶媳妇!