import java.util.*; public class Solution{ public int lengthOfLongestSubstring(String s){ if(s == null){ return 0; }

    char[] ch = s.toCharArray();
    if(ch.length == 1) return 1;
    int[] dp = new int[ch.length];
    dp[0] = 1;
    HashMap<Character,Integer> map = new HashMap<>();
    map.put(ch[0],0);
    int max = 1;
    for(int i = 1;i < ch.length;i++){
        if(!map.containsKey(ch[i])){
            dp[i] = dp[i-1]+1;
        }else{
            dp[i] = Math.min(dp[i-1]+1,i - map.get(ch[i]));
        }
        map.put(ch[i],i);
       max = Math.max(max,dp[i]);
    }
    return max;
}

}

// int[]dp=new int[array.length]; // int maxLength=1; // HashMap<Character, Integer>map=new HashMap<>(); // dp[0]=1; // map.put(array[0],0); // for(int i=1;i<array.length;i++){

// if(!map.containsKey(array[i])){ // dp[i]=dp[i-1]+1; // } // else{ // dp[i]=Math.min(dp[i-1]+1,i-map.get(array[i])); // } // map.put(array[i],i); // maxLength=Math.max(maxLength,dp[i]); // } // return maxLength; // } // }