定义两个数组,一个boolean[],记录是否出现过这个字符,一个int[],记录该字符上一次出现的位置,数组下标是字符的ASCII码
设置一个begin指针,每次遇到相同字符时,begin重新置为i;
特别注意,遇到相同字符时,就要重新计算长度,所以从上一次begin到这个字符上一次出现的位置,这之间的字符布尔数组应该设置为false
public int lengthOfLongestSubstring(String s) {
int max = 0,temp =0;
int length = s.length();
int begin =0;
boolean[] b = new boolean[256];
int[] p = new int[256];
for(int i =0;i<length;i++){
char c = s.charAt(i);
if(b[c]){
temp = begin;
begin = p[c]+1;
for(int j =temp;j<begin;j++){
b[s.charAt(j)] = false;
}
}
temp = max;
max = i-begin+1;
if(temp>max)max=temp;
b[c] = true;
p[c] = i;
}
return max;
}