Given a string,find the length of the longest substring without repeating characters.

 

 Appoach 1:Brute Force

public int lengthOfLongestSubstring(String s){
       int n=s.length();
       HashSet<Character> hashSet=new HashSet<>();
       int len=0;
       for(int i=0;i<n;i++){
           for(int j=i;j<n;j++){
                if(hashSet.contains(s.charAt(i))){
                    len=Math.max(len,hashSet.size());
                    hashSet.clear();
                    break;
                }else{
                    hashSet.add(s.charAt(i));
                }
           }
       }
       return n==1?1:len;
}

Approach 2:Sliding Window

public int lengthOfLongestSubstring(String s){
     int n=s.length();
     int len=0,i=0,j=0;
     HashSet<Character> hashSet=new HashSet<>();
     while(i<n&&j<n){
         if(!hashSet.contains(s.charAt(j))){
              hashSet.add(s.charAt(j++));
              len=Math.max(len,j-i);              
         }else{
              hashSet.remove(s.charAt(i++));
         }
     }
     return len;
}

Approach 3:Sliding Window Optimized

public int lengthOfLongestSubstring(String s){
      int n=s.length(),len=0;
      HashMap<Character,Integer> map=new HashMap<>();
      for(int j=0,i=0;j<n;j++){
          if(map.containsKey(s.charAt(j))){
               i=Math.max(map.get(s.charAt(j)),i);
          }
          len=Math.max(len,j-i+1);
          map.put(s.charAt(j),j+1);
      }
      return len;
}

 

 posted on 2020-02-12 12:45  会飞的金鱼  阅读(77)  评论(0)    收藏  举报