一、题目
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
二、解题思路
代码:
class Solution {
public int lengthOfLongestSubstring(String s) {
int len = s.length(),result = 0;
Map<Character,Integer> map = new HashMap();
char[] chars = s.toCharArray();
for (int start = 0,end = 0;end < len; end++) {
char c = chars[end];
if (map.containsKey(c)) {
// 当map包含重复元素时,需要重新计算start的下标
start = Math.max(start, map.get(c));
}
// 比较最大的无重复字串长度
result = Math.max(result, end - start + 1);
// end+1,是指end后面一个字符开始统计不重复的下标
map.put(c, end + 1);
if((len - start) <= result) {
// 如果start之后的字符总长度已经小于result,则不用再遍历
break;
}
}
return result;
}
}
图解1:
图解2:
图解3:
图解4:
图解5:
图解6:
图解7:
图解8:
图解9:
图解10:
图解11: