image.png
第一感觉就是用滑动窗口。但是感觉滑动窗口中每次比较,时间负责度会上升也就是O(m*n),如果内部用hash表本以为可以下降,实际还需要删除相同字符串之前的所有字符串,而且hash计算反而浪费了时间。以下是代码,虽然结果正确,但不值得借鉴。
if(s==null || s!=null && s.length()<=0){
return 0;
}
int maxLength = 0;
char[] chars = s.toCharArray();
//key:字符 value下标
Map<Character,Integer> map = new HashMap<>();
int start =0;
for(int i=0;i<chars.length;i++){
if(map.containsKey(chars[i])){
int end = map.get(chars[i]);
//由于是字串,所以map必须删除之前的字符,反而浪费时间
for(int j=start;j<=end;j++){
map.remove(chars[j]);
}
start=end+1;
}
map.put(chars[i],i);
maxLength = Math.max(maxLength,i-start+1);
}
return maxLength;