题解 | #最长不含重复字符的子字符串#
最长不含重复字符的子字符串
http://www.nowcoder.com/practice/48d2ff79b8564c40a50fa79f9d5fa9c7
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return int整型
*/
public int lengthOfLongestSubstring (String s) {
int n = s.length();
int i = 0;
int j = 0;
Set<Character> set = new HashSet<>();
int max = 0;
while (j < n) {
// 当前滑动窗口内无重复元素,右边界j一直右移
if (!set.contains(s.charAt(j))) {
System.out.println("不包含元素;"+s.charAt(j));
set.add(s.charAt(j));
j++;
} else { // 遇到窗口内已有的元素,左边界i一直右移直到重复元素不在Set内
while (set.contains(s.charAt(j))) {
// System.out.println("包含;"+s.charAt(i));
set.remove(s.charAt(i)); //必须加上,否则当有相同的数据时候,while循环一直在此处循环
i++;
System.out.println(i);
}
}
max = Math.max(max, j - i);
}
return max;
}
}
注意: while循环,当有相同的元素时候,必须先删除,否则一直处在 循环当中