以下是我自己见解,写的不好多多包涵
如“abcdb”,两个变量,一个保存目前所遍历字符的下标位置(pre),一个保存当前这个字符最大的无重复长度(cur),而length则取(length,cur)最大长度
import java.util.*;
public class DistinctSubstring {
public int longestSubstring(String A, int n) {
// write code here
char[] ch=A.toCharArray();//将字符A转为字符串数组
//字符的ascii码在0-256内
int[] m=new int[256];
for(int i=0;i<256;i++){
m[i]=-1;
}
int pre=-1;//记录此字符的下标
int cur=0;//记录当前这个字符的最大无重复长度
int len=0;//记录最后的长度
for(int i=0;i<n;i++){
pre=Math.max(pre,m[ch[i]]);//若有重复字符,记录下标
cur=i-pre;//若pre为-1,代表没有重复字符,长度加1,若有,则减去,得到目前最大长度
len=Math.max(cur,len);
m[ch[i]]=i;
}
return len;
}
}