Leetcode3
1.问题描述
2.解决方案
解法一:滑动窗口法
1.已经做过不少滑动窗口题了,还是那句话,求一个子数组最长或者最短,子数组满足一定的条件,必然要用滑动窗口
2.这道题一看题目就是子数组符合条件,如果不重复加入hashmap,并更新最大值
3.重复了就left++,直到不重复
public class lc3 {
public int lengthOfLongestSubstring(String s) {
HashMap<Character,Integer> map = new HashMap();
int left=0;
int right=0;
int maxLength=0;
for(right=left;right<s.length();right++){
//如果不重复就加入,并更新最大值
if(map.containsKey(s.charAt(right))==false){
map.put(s.charAt(right),1);
if(right-left+1>maxLength) maxLength=right-left+1;
}
//一旦重复了left++直到不重复
else {
while(map.containsKey(s.charAt(right))==true){
map.remove(s.charAt(left++));
}
map.put(s.charAt(right),1);
//这条语句加上当然没问题,但是要是想清楚了就会发现,这里不会出现最大值的
//if(right-left+1>maxLength) maxLength=right-left+1;
}
}
return maxLength;
}
}