美文网首页
leetcode题目3:无重复字符的最长子串(java)

leetcode题目3:无重复字符的最长子串(java)

作者: castlet | 来源:发表于2020-05-10 12:49 被阅读0次

    题目描述

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

    示例

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

    解题思路

    1. 定义一个队列,
    2. 对字符串里的字符进行遍历,先判断队列里是否存在相同字符,如果存在相同的字符,则移除队列的元素,直到队列中不存在相同的字符后,再将当前字符入队。
    3. 队列的最大长度即为无重复最长子串的长度。

    代码

    public int lengthOfLongestSubstring(String s) {
        if (s == null || s.length() == 0) {
            return 0;
        }
        Queue<Character> queue = new LinkedList<>(); // 定义队列
        int maxSubStringLength = 0;
        for (int i = 0; i < s.length(); i++) {
            while (queue.contains(s.charAt(i))) {
                // 队列中存在相同字符,则出队,直到没有相同字符为止。
                queue.poll();
            }
            // 入队
            queue.offer(s.charAt(i));
    
            if (queue.size() > maxSubStringLength) {
                // 更新最大值
                maxSubStringLength = queue.size();
            }
        }
        return maxSubStringLength;
    }
    

    相关文章

      网友评论

          本文标题:leetcode题目3:无重复字符的最长子串(java)

          本文链接:https://www.haomeiwen.com/subject/drqjnhtx.html