问题描述:
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for “abcabcbb” is “abc”, which the length is 3. For “bbbbb” the longest substring is “b”, with the length of 1.
分析:对于一个子字符串而言,必须要有一个base,即从何处开始的。当有这个base时,如果有重复字符在base之前,可以忽略。保存一个hashmap,当新入一个字符时,查看hashMap,如果存在对应的key,找到此时的index,然后将count计数减去(index-base+1),然后再移动base。
代码如下:412ms
public int lengthOfLongestSubstring(String s) {
HashMap<Character, Integer> maps = new HashMap<Character, Integer>();
int length = s.length();
int index;
int max = 0;
int count = 0;
int base = 0;//start of subString
for(int i = 0;i<length;i++){
if(maps.containsKey(s.charAt(i))){
index = maps.get(s.charAt(i));
if(index>=base){
count = count-(index-base+1);
base = index+1;
}
}
maps.put(s.charAt(i), i);
count++;
if(count>max)
max = count;
}
return max;
}