以“无重复字符的最长子串”为例子,学习下简便的滑动窗口实现模板:
实现细节: 使用HashMap,Key保存内容,在本题中为Character,Value保存下标,在本题中为Integer.
if (s.length()==0) return 0;
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
int max = 0;
int left = 0;
for(int i = 0; i < s.length(); i ++){
if(map.containsKey(s.charAt(i))){ //处理重复
left = Math.max(left,map.get(s.charAt(i)) + 1);//出现重复,左指针后移
}
map.put(s.charAt(i),i);
max = Math.max(max,i-left+1);//Max永远保留的是历史滑块最大值
}
return max;