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

2020-05-10  本文已影响0人  castlet

题目描述

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

示例

输入: "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;
}
上一篇下一篇

猜你喜欢

热点阅读