public static int lengthOfLongestSubstring(String s) { // 记录字符上一次出现的位置 int[] last = newint[128]; for(int i = 0; i < 128; i++) { last[i] = -1; } int n = s.length();
int result = 0; int start = 0; // 窗口开始位置 for(int i = 0; i < n; i++) { // 字符转数字 intindex = s.charAt(i); // 最主要的就是这一行,找到起始位置:分两种情况: // 一直都是不同的字符,那start不变 // 遇到重复的,也分两种情况,一种是和起始重复,从重复的字符+1位 // 一种是和后面的字符重复,也是从重复的字符+1位 start = Math.max(start, last[index] + 1); // 记录最长串长度 result = Math.max(result, i - start + 1); // 记录最新的该字符所在位置 last[index] = i; }