一、题目
二、上代码
class Solution { public int lengthOfLongestSubstring(String s) { // 记录字符上一次出现的位置 int[] last = new int[128]; for(int i = 0; i < 128; i++) { last[i] = -1; } int n = s.length(); int res = 0; int start = 0; // 窗口开始位置 for(int i = 0; i < n; i++) { int index = s.charAt(i); start = Math.max(start, last[index] + 1); res = Math.max(res, i - start + 1); last[index] = i; } return res; } }
三、思路
无疑这是一个极佳的解题思路,让我有点猪脑过载,值得学习。
index记录字符的int编码
没有重复值时last[index]都是-1,就是说start=0,res在+1,并将last[index]=-1改成j(j=目前的i)
遇到重复值时,start=j+1,所以res=Math.max(i, i - j)=i,即得到目前最大i