无重复字符的最长子串

问题描述:

给定一个字符串,找出不含有重复字符的最长子串的长度。

示例:

给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。

给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。

给定 "pwwkew" ,最长子串是 "wke" ,长度是3。

解题思路:

使用集合set存储字符串s中第 i 到第 j-1 个不重复的字符,判断s中的第 j 个字符是否已经存在set中,若无添加至set

否则,设第 j 个字符与set中的第k个字符相同,则删除set中 第 i 到 第k 的所有字符, 再将第j个字符添加至set中。

如字符串s="abcdbcdd",set中已经存在字符:a、b、c、d,这时s中的第4个字符b与set中的第1个字符相同,则删去set中第0至第1的字符。并将第4个字符b加入set中。

实现代码:

    public static int length(String s) {

        int max = 0;
        int i=0, j=0;
        Set<Character> set = new HashSet<>(s.length());

        while (i < s.length()) {

            if (set.contains(s.charAt(i))) {
                set.remove(s.charAt(j++));
            }
            else {
                set.add(s.charAt(i++));
                max = Math.max(max, set.size());
            }
        }
        return max;
    }

mark

原文地址:https://www.cnblogs.com/deltadeblog/p/9416304.html