无重复字符串的最长字串

/**
* 滑动窗口
* @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/
posted @ 2020-08-05 15:32  文所未闻  阅读(166)  评论(0编辑  收藏  举报