给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
第二次刷,每次刷都有不同得体会
这道题采用map,key存放得是字符,value存放得是“下标得位置”。。如果出现相同得了,我就把start变为最大得下标值~
class Solution {
public int lengthOfLongestSubstring(String s) {
Map<Character,Integer> map = new HashMap<>();//记录索引
char[] c = s.toCharArray();
int max = 0;
for(int start=0,end=0;end<c.length;end++){
if(map.containsKey(c[end])){
start = Math.max(start,map.get(c[end]));
}
max = Math.max(max,end-start+1);//依次去比较,找到最大值
map.put(c[end],end+1);//放到这里得原因和“1.两数之和找索引”是一样得。。都是为了避免发生重复,然后找不到最小得那个了,因为覆盖掉了~
}
return max;
}
}