找到字符串的最长无重复字符子串

题目:

给定一个数组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;

    }
原文地址:https://www.cnblogs.com/dongma/p/14199124.html