题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
大佬 牛客id:南星 的代码(侵删)
class Solution {
public int lengthOfLongestSubstring(String s) {
// 记录字符上一次出现的位置。
int[] last = new int[128];//一个整形一维数组last,长度为128。
for(int i = 0; i < 128; i++) {
last[i] = -1;
}//遍历数组last,使所有元素等于-1。
int n = s.length();//n为字符串长度。
int res = 0;//不重复字串的长度
int start = 0; // 当前不重复字串开始位置
for(int i = 0; i < n; i++) {
int index = s.charAt(i);//charAt() 方法可返回指定位置的字符,例如var str="Hello world!",则str.charAt(1)=e。
start = Math.max(start, last[index] + 1);//当前不重复字串开始位置
res = Math.max(res, i - start + 1);//比较已知最大不重复字串的长度和当前不重复字串的长度
last[index] = i;//给当前字符串中的字符定位
}
return res;
}
}