import java.util.Map;
import java.util.HashMap;
//维持最大字符不重复的滑动窗口
public int lengthOfLongestSubstring(String s) {
if(null==s || s.length() == 0) return 0;
Map<Character,Integer> map = new HashMap<Character,Integer>();
char[] chars = s.toCharArray();
int longest = 1;
int left = 0;
for(int i = 0; i < chars.length; i++){
//例如abcab,当窗口左右边界为left=0和i=3时,窗口右边界为a在窗口内,为了维持
//窗口内没有重复字符,那么左边界必须把前面字符a(下标为0)给移出去以致不与新加入的字
// 符a(下标为3)重复,那么窗口左边界为前面字符a(下标为0)的下一个字符
//map.get(chars[i]) + 1
if(map.containsKey(chars[i]) && map.get(chars[i]) >= left){
left= map.get(chars[i]) + 1;
}
map.put(chars[i], i);
longest = Math.max(longest, i - left+ 1);
}
return longest;
}
3.Longest Substring Without Repeating Characters
猜你喜欢
转载自blog.csdn.net/STU756/article/details/81677176
今日推荐
周排行