Longest Substring Without Repeating Characters
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.
public class Solution {
public int lengthOfLongestSubstring(String s) {
int max = 1, tempmax = 1, head = 0;
char[] ss = s.toCharArray();
if(ss.length == 0) return 0;
else if(ss.length == 1) return 1;
else if(ss.length == 2){
if(ss[0] == ss[1]) return 1;
else return 2;
}
char shead = ss[head];
Map<String,Integer> map = new HashMap<String,Integer>();
new String();
String add = String.valueOf(shead);
map.put(add,head);
for(int i = 1; i < ss.length; i++){
tempmax = i-head+1;
char stail = ss[i];
new String();
String now = String.valueOf(stail);
if(map.containsKey(now)){
int pointer = map.get(now);
if(pointer >= head) {
//因为map放入相同的key,只是跟新value,所以当前map中的位置都是最新的
//如果在头的前面就说明都没出现过,后面就表示出现了,这时候移动头指针就行
//map表不会很大,只是要频繁的更新
tempmax = i-pointer;
head = pointer+1;
}else{
if(max < tempmax) max = tempmax;
}
map.put(now,i);
}else {
if(max < tempmax) max = tempmax;
map.put(now,i);
}
}
return max;
}
}