LeetCode-3.无重复字符的最长子串

2020-05-09  本文已影响0人  悠扬前奏

题目

描述

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

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3

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

解答

思路

利用队列使用头尾双指针。

代码

class Solution {
    public int lengthOfLongestSubstring(String s) {
        //  将String转换为sb
        StringBuilder sb = new StringBuilder(s);
        // 队列,方便双指针移动
        LinkedList<Character> ss = new LinkedList<>();
        // 当前最长字串的长度
        int max = 0;
        // 循环每个字符
        for (int i = 0; i < sb.length(); i++) {
            char a = sb.charAt(i);
            if (!ss.contains(a)) {
                // 如果队列中不存在,直接插入
                ss.add(a);
            } else {
                // 如果队列中存在,从队列首依次推出到该字符
                while (ss.pop() != a) {
                }
                // 再把字符添加到队列尾
                ss.add(a);
            }
            // 判断子字符最长长度
            if (max < ss.size()) {
                max = ss.size();
            }
        }
        // 返回结果
        return max;
    }
}
上一篇下一篇

猜你喜欢

热点阅读