classSolution{ publicintlengthOfLongestSubstring(String s){ if (s == null) { return0; } int n = s.length(); if (n == 0 || n == 1) { return n; } HashMap<Character, Boolean> have = new HashMap<Character, Boolean>(); for (int i = 0; i < n; ++i) { have.put(s.charAt(i), false); } int u = 0, v = 0; have.put(s.charAt(0), true); while (v + 1 < n && !have.get(s.charAt(v + 1))) { ++v; have.put(s.charAt(v), true); } int res = v + 1; boolean test = false; while (v < n - 1) { ++v; while (!have.get(s.charAt(v)) && v + 1 < n) { have.put(s.charAt(v), true); ++v; } res = Math.max(res, v - u); if (test) { System.out.println(res + ", " + u + ", " + v); } if (v == n - 1 && !have.get(s.charAt(v))) { res = Math.max(res, v - u + 1); if (test) { System.out.println(res + ", " + u + ", " + v); } break; } while(s.charAt(u) != s.charAt(v)) { have.put(s.charAt(u), false); ++u; } ++u; res = Math.max(res, v - u + 1); if (test) { System.out.println(res + ", " + u + ", " + v); } } return res; } }