这题比较难,暂时只有在哔哩哔哩看见一种比官方提交还要牛逼的解法,代码逻辑比较简洁,代码也是比较短
:LeetCode3-无重复字符的最长子串
class Solution {
public int lengthOfLongestSubstring(String s) {
int[] pos=new int[128];
for(int i=0;i<128;++i){
pos[i]=-1;
}
int ans=0;
for(int i=0,j=0;i<s.length();++i){//i记录右边界,j记录左边界
j=Math.max(j,pos[s.charAt(i)]+1);//拿到上一个重复出现的字符的位置
ans=Math.max(ans,i-j+1);//i-j+1是滑动窗口的长度和当前的最优结果比较.
pos[s.charAt(i)]=i;//记录这个字符出现的位置.
}
return ans;
}
}