public class LengthOfLongestSubstring {
public static int lengthOfLongestSubstring(String s) {
if (s == null) {
return 0;
}
Map<Character, Integer> map = new HashMap<>();
int maxLength = 0;
int start = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
Integer duplicateIndex = map.put(c, i);
if (duplicateIndex != null) {
if (duplicateIndex >= start) {
maxLength = Math.max(maxLength, i - start);
start = duplicateIndex + 1;
}
}
}
return Math.max(maxLength, s.length() - start);
}
public static void main(String[] args) {
int maxLength = lengthOfLongestSubstring("abcabcbb"); // 3
System.out.println(maxLength);
maxLength = lengthOfLongestSubstring("bbbbb"); // 1
System.out.println(maxLength);
maxLength = lengthOfLongestSubstring("b"); // 1
System.out.println(maxLength);
maxLength = lengthOfLongestSubstring(""); // 0
System.out.println(maxLength);
maxLength = lengthOfLongestSubstring(null); // 0
System.out.println(maxLength);
}
}