public int lengthOfLongestSubstring(String s) {
if(s == null || s.length() == 0) return 0;
char[] target = s.toCharArray();
int tail, head;
tail = 0;
Map<Character, Integer> map = new HashMap<Character, Integer>();
map.put(target[0], 0);
int maxSubstringNum = map.size();
for(head = 1; head < s.length(); head++) {
if(map.containsKey(target[head])) {
int tmp = map.get(target[head]);
for(int i = tail; i <= tmp; i++) {
map.remove(target[i]);
}
tail = tmp + 1;
map.put(target[head], head);
}
else {
map.put(target[head], head);
}
if(map.size() > maxSubstringNum) {
maxSubstringNum = map.size();
}
}
return maxSubstringNum;
}