package com.anuragkapur.leetcode; import java.util.HashSet; import java.util.Set; /** * @author anuragkapur */ public class LongestSubstringWithoutRepeatingCharacters { /** * Running time: O(n) * * @param s * @return */ public int lengthOfLongestSubstring(String s) { if (s == null || s.length() == 0) { return 0; } char chars[] = s.toCharArray(); Set<Character> uniques = new HashSet<>(); int start = 0; int end = 0; int length = 0; while (end < chars.length) { if (!uniques.add(chars[end])) { int candidateLength = end-start; length = Math.max(length, candidateLength); // move start until the repeated element is removed while (chars[start] != chars[end]) { uniques.remove(chars[start]); start ++; } start ++; } end ++; } return Math.max(length, end-start); } }