public class Solution { public int lengthOfLongestSubstring(String s) { if (s == null || s.isEmpty()) { return 0; } int max = 0; Map<Character, Integer> lastPos = new HashMap<Character, Integer>(); int start = 0; lastPos.put(s.charAt(0), start); for (int i = 1; i < s.length(); i++) { char c = s.charAt(i); if (lastPos.containsKey(c) && lastPos.get(c) >= start) { if (i - start > max) { max = i - start; } start = lastPos.get(c) + 1; } lastPos.put(c, i); } if (s.length() - start > max) { max = s.length() - start; } return max; }}