借助的排名第一的老哥Edwin_Xu的思路,只是解释了一下
找到字符串的最长无重复字符子串
http://www.nowcoder.com/questionTerminal/b56799ebfd684fb394bd315e89324fb4
借助的排名第一的老哥Edwin_Xu的思路,只是解释了一下
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])){//true:出现元素重复 //如果出现重复的元素在已知最长序列中,那么直接让起始位置等于重复元素位置;(start = map.get(arr[end])+1) //如果出现重复的元素在已知最长序列之前,那么起始位置不会发生改变 //所以start = Math.max( map.get(arr[end])+1,start); start = Math.max( map.get(arr[end])+1,start); } //一般而言,最大长度max = end-start+1;但是如果出现元素重复,那么起始位置会发生改变,随着起始位置发生改变, //end-start+1不一定大于原来的最大长度max,所以需要取最大值 max = Math.max(max,end-start+1);//记住一定要加1,单纯的求长度 map.put(arr[end],end); } return max; }