这道题目使用的方法具有非常大的普遍性,实际上是两个指针。
一个指针记录当前所记录的子串的开始,另一个是当前遍历的位置,如果产生了重复,那么需要进行修正,实际上是对子串进行收缩。
从当前子串开始位置到重复位置,重置相应的字符为违被搜索状态。在收缩之前需要进行,最长子串长度的更新。
1 public class Solution { 2 public int lengthOfLongestSubstring(String s) { 3 int startindex[]=new int[256]; 4 for(int i=0;i<256;i++){ 5 startindex[i]=-1; 6 } 7 int maxlength=0; 8 int curlength=0; 9 int countstart=0;10 for(int i=0;imaxlength?curlength:maxlength;18 //clear some19 for(int k=countstart;k maxlength){28 maxlength=curlength;29 }30 }31 }32 return maxlength;33 }34 }