题目:
给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。
思路:
定义左右指针,和一个长度变量
map用于存放遍历到的元素,key为元素值,val为元素索引
当根据map 找不到对应值时,计算left ,right的长度,并给map添加元素
当根据map 找到对应值时,left 移动到重复值的前面一位,并清空map,重新添加map的值
代码:
private static int maxLength (int[] arr) { Map<Integer,Integer> map = new HashMap<>(); int max = 0; int left = 0; int right = 0; while (right < arr.length){ int val = arr[right]; Integer valIndex = map.get(val); if(valIndex == null){// 是个不重复的字符 map.put(val,right); int len = right - left; if(len > max){ max = len; } }else {// 找到重复字符 left = valIndex + 1; map.clear(); for (int i = left; i <= right; i++) { map.put(arr[i],i); } } right++; } max++; System.out.println("max:"+max); return max; }