本题使用队列来实现,容易理解,这个模板可以适用于求最长无重复的子串。
思路分析:把元素不停的加入到队列中,如果有相同的元素,就把队首的元素移除,这样我们就可以保证队列中永远都没有重复的元素。维持一个最大值返回即可

1.创建队列(老是记不住)
Queue<Integer> queue=new LinkedList<>();
2.一些方法的区别

offer,add 区别:

一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。

这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。

poll,remove 区别:

remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似, 但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。


import java.util.*;


public class Solution {
    /**
     * 
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public int maxLength (int[] arr) {
        // write code here
        Queue<Integer> queue=new LinkedList<>();//用链表实现队列
        int max=0;//维护队列的最大值
        for(int c:arr){
            while(queue.contains(c)){
                queue.poll();//如果有重复的,队头出队
            }
            queue.add(c);//添加到队尾
            max=Math.max(max,queue.size());
        }
        return max;
    }
}