public static int test(String str) {
if (str == null || str == "") {
return 0;
}
// sum代表子串长度,n是字符串长度
int sum = 0, n= str.length();
// 设定一个hashmap
Map<Character, Integer> map =new HashMap<>();
// 设定一个start end记录子串的长度,从头计算
for (int start=0,end=0;end < n;end ++) {
// 取end位置的字符
char alpha = str.charAt(end);
// 如果map的key中有这个字符,则改变的开始位置,也就是start的位置
if (map.containsKey(alpha)) {
start = Math.max(map.get(alpha),start);
}
// 比较目前的子串长度与上次记录长度,取较大值
sum = Math.max(sum, end-start+1);
// 将遍历的字符存入map,key为字符(为了方便比较用key存)
map.put(str.charAt(end), end+1);
}
// 返回最大长度
return sum;
}