给定一个字符串
s
,请你找出其中不含有重复字符的 最长子串 的长度。
思路:利用map集合,key为字符,value值为字符位置加一。然后就是滑动窗口,位数增加,并判断是否包含新元素,如果包含,就舍弃掉原来元素位置之前的元素,并往后继续比较,循环结束后,保留最大的长度输出。
public int lengthOfLongesSubstring(String s) {
int ans = 0;
Map<Character, Integer> map = new HashMap<>();
for (int end = 0, start = 0; end < s.length(); end++) {
char c = s.charAt(end);
if (map.containsKey(c)){
start=Math.max(map.get(c),start);
}
ans=Math.max(ans,end-start+1);
map.put(s.charAt(end),end+1);
}
return ans;
}