public int maxLength (int[] arr) {
// write code here
int len=0;
int maxlen=0;
int head;
ArrayDeque <integer> q = new ArrayDeque();//采用队列形式
for(int c:arr){
if(q.contains(c)==false) {
//假设不包含此元素,则加入队尾
q.addLast(c);//加入一个元素,长度加一
len++;
}
else{
//假如包含此元素,则从头部开始,删除元素,直到需要删除的元素与这个元素相等
while((head=q.peekFirst())!=c){
q.pollFirst();
len--;
}
q.pollFirst();//此时q头部元素与c相等,把它删了,再把c加入到队尾
q.addLast(c);//长度不变
}
if(len>maxlen){
//做完一次循环,查看是否需要更新maxlen
//此时剩下的字串是包含c最近的字串,与以往求最长字串进行比较,长则替换
maxlen = len;
}
}
return maxlen;
}</integer>