/**
* 滑动窗口
* @param s
* @return
*/
public int lengthOfLongestSubString(String s){
//定义左右边界
int l = 0, r = -1; //[l...r] 此为滑动窗口,初始为空
int res = Integer.MIN_VALUE; //记录最长无重复字串长度
//初始化一个固定的数组,作为字符映射判断是否重复 0 -- 首次出现 1 -- 不是首次出现
int[] valid = new int[256];
while(l < s.length()){
if(r + 1 < s.length() && valid[s.charAt(r + 1)] == 0){ //窗口内无重复元素
r ++; //窗口向右移动
valid[s.charAt(r)] ++;
}else { //窗口内出现重复元素
valid[s.charAt(l)] --; //将窗口内重复元素剔除
l ++; //窗口向右移动
}
//不断更新窗口大小
res = Math.max(res, r - l + 1);
}
return res;
}
题目来源:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/