[Leetcode] Longest Substring Without Repeating Characters
这道题目使用的方法具有非常大的普遍性,实际上是两个指针。
一个指针记录当前所记录的子串的开始,另一个是当前遍历的位置,如果产生了重复,那么需要进行修正,实际上是对子串进行收缩。
从当前子串开始位置到重复位置,重置相应的字符为违被搜索状态。在收缩之前需要进行,最长子串长度的更新。
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;i<s.length();i++){ 11 char c=s.charAt(i); 12 int index = (int) c; 13 if(startindex[index]==-1){ 14 startindex[index]=i; 15 curlength++; 16 }else{ 17 maxlength = curlength>maxlength?curlength:maxlength; 18 //clear some 19 for(int k=countstart;k<startindex[index];k++){ 20 startindex[(int)(s.charAt(k))]=-1; 21 } 22 curlength=i-startindex[index];//not the maximum 23 countstart=startindex[index]+1; 24 startindex[index]=i; 25 } 26 if(i==s.length()-1){ 27 if(curlength>maxlength){ 28 maxlength=curlength; 29 } 30 } 31 } 32 return maxlength; 33 } 34 }