解题思路:通过两个指针分别指向子串的头尾,并将出现过的字符以及最新一次出现的位置存入hash表中。当尾指针所指字符在hash表中,则改变头指针位置;否则,只向后移动尾指针。
import java.util.*; public class Solution { /** * * @param arr int整型一维数组 the array * @return int整型 */ public int maxLength (int[] arr) { // write code here HashMap<Integer,Integer> mp=new HashMap<>(); int max=0; int n=1; if(arr.length==1){ return 1; } int i=0; mp.put(arr[0],0); for(int j=1;j<arr.length;j++){ if(mp.containsKey(arr[j])){ i=Math.max(i,mp.get(arr[j])+1); mp.replace(arr[j],j); max=Math.max(max,n); n=j-i+1; } else{ mp.put(arr[j],j); n++; } } return Math.max(max,n); } }