给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。
import java.util.*;
public class Solution {
/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
public int maxLength (int[] arr) {
HashMap<Integer,Integer> map = new HashMap<>();
int max = 1;
for(int start = 0, end = 0; end<arr.length ; end++){
if(map.containsKey(arr[end])){
//重复了
start = Math.max(start,map.get(arr[end])+1);
//注意:这里一定要取最大的start,不然就错误了
//为什么? 因为重复数字的索引很可能比start小
}
max = Math.max(max , end-start+1);
map.put(arr[end],end);
}
return max;
}
}
my
package com;
import java.util.ArrayList;
//最长无重复子串
public class comm {
public static void main(String[] args) {
int[] arr = new int[]{2,2,3,4,3,4,5,6,7,7};
int len = arr.length;
int re = maxLength (arr);
System.out.println(re);
}
public static int maxLength (int[] arr) {
int p = 0;
int q = 1;
int mm = 0;
int len = arr.length;
//StringBuffer sb = new StringBuffer();
ArrayList<Integer> list = new ArrayList<>();
while (p < len && q < len){
if(list.isEmpty())
{
list.add(arr[p]);
}
else if(list.contains(arr[q]))
{
mm = Math.max(list.size(),mm);
int index = p + list.indexOf(arr[q]);
list = new ArrayList<>();
p = index+1;
q = p+1;
}else{
list.add(arr[q]);
q++;
}
}
return mm;
}
// write code here
}