跳至主要內容

48-最长不含重复字符的子字符串

daipeng小于 1 分钟

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

我们可以遍历这个字符串,使用一个队列保存子串,假如遇到重复的字符,就从队列中删除队头元素,直到队列中没有该重复字符。

这里通过队列可以保持子串的结构。

public int lengthOfLongestSubstring(String s) {
        if (s == null || s.length() == 0) {
            return 0;
        }
        char[] chs = s.toCharArray();
        int max = 0;
        int j = 0;
        LinkedList<Character> set = new LinkedList<>();
        while (j < chs.length) {
            if (set.contains(chs[j])) {
                set.removeFirst();
            }else{
                set.add(chs[j]);
                j++;
            }
            if (set.size() > max) {
                max = set.size();
            }
        }
        return max;
    }