【Java】【LeetCode】3. Longest Substring Without Repeating Characters 最长无重复字符的子串

这道求最长无重复子串的题和之前那道 Isomorphic Strings 很类似,属于LeetCode的早期经典题目,博主认为是可以跟Two Sum媲美的一道题。给了我们一个字符串,让我们求最长的无重复字符的子串,注意这里是子串,不是子序列,所以必须是连续的。我们先不考虑代码怎么实现,如果给一个例子中的例子"abcabcbb",让你手动找无重复字符的子串,该怎么找。博主会一个字符一个字符的遍历,比如a,b,c,然后又出现了一个a,那么此时就应该去掉第一次出现的a,然后继续往后,又出现了一个b,则应该去掉一次出现的b,以此类推,最终发现最长的长度为3。下面这种解法使用了set,把出现过的字符都放入set中,遇到set中没有的字符就加入set中并更新结果res,如果遇到重复的,则从左边开始删字符,直到删到重复的字符停止:

public static int lengthOfLongestSubstring(String s)
    {
        int left = 0, right = 0, res = 0;
        Set set = new HashSet();
        while (right < s.length())
        {
            if (!set.contains(s.charAt(right)))
            {
                set.add(s.charAt(right++));
                res = Math.max(res, set.size());
            }
            else
            {
                set.remove(s.charAt(left++));
            }
        }
        return res;
    }

 

你可能感兴趣的:(LeetCode,Algorithm)