剑指 Offer 48. 最长不含重复字符的子字符串

public int lengthOfLongestSubstring(String s) {
        //用哈希表存储
        int len = s.length();
        if(len<=1) return len;
        char[] c = s.toCharArray();
        HashMap<Character,Integer> map = new HashMap<>();
        map.put(c[0],0);
        int max_len = 1;
        int i = 0,j = 1;
        while(j<len){
            if(map.containsKey(c[j])){
                int index = map.get(c[j]);
                max_len = Math.max(max_len,j-i);
                for(int k = i;k<=index;k++){
                    map.remove(c[k]);
                }
                i = index+1;
                map.put(c[j],j);
                j++;
            }else{
                map.put(c[j],j);
                j++;
            }
        }
        return Math.max(max_len,j-i);
    }

 

 


public int lengthOfLongestSubstring(String s) {
        int[] alpha = new int[128];
        for(int i=0;i<128;i++){
            alpha[i] = -1;
        }
        int left = 0;
        int ans = 0;
        for(int i=0;i<s.length();i++){
            int temp = s.charAt(i);
            if(alpha[temp] <= left){

                ans = Math.max(i - left+1,ans);
            }else{
                left = alpha[temp];
            }
            alpha[temp] = i+1;

        }
        return ans;
    }

 

posted @ 2020-08-24 22:07  欣姐姐  阅读(147)  评论(0编辑  收藏  举报