leetcode question3.Longest Substring Without Repeating Characters

问题描述:给出一个字符串,求出该字符串中不包含重复字符的子串的最大长度


解答1:

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        HashSet arr = new HashSet();
        int i = 0;
        int j = 1;
        int m = 0, n = 1;//初始子串位置
        arr.add(s.substring(i,j));
        while(j < s.length()){
        	String a = s.substring(j, j+1);
        	if(arr.contains(a)){
        		if(arr.size() > (n-m)){
        			m = i;
        			n = j;
        		}
        		while(!a.equals(s.substring(i, i+1))){
        			arr.remove(s.substring(i, i+1));
        			++i;
        		}//更新子串位置
        		++i;
        		++j;
        	}else{
        		arr.add(s.substring(j, j+1));
        		j++;
        	}
        }
        return n-m;
    }
}


解答2:

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s.length() == 0)
			return 0;
        HashMap arr = new HashMap();//<字符->位置>
        int i = 0;
        int j = 1;
        int m = 0, n = 1;
        arr.put(s.substring(i,j), i);
        while(j < s.length()){
        	String a = s.substring(j, j+1);
        	Integer in = arr.get(a);
        	if(in != null){
        		if(arr.size() > (n-m)){
        			m = i;
        			n = j;
        		}
        		for(int x = i; x < in; x++){
        			arr.remove(s.substring(x, x+1));
        		}
                arr.put(a, j);
        		i = in+1;
        		++j;
        	}else{
        		arr.put(s.substring(j, j+1), j);
        		j++;
        	}
        }
        if(arr.size() > (n-m)){
        	m = i;
        	n = j;
        }
        return n-m;
    }
}



你可能感兴趣的:(leetcode)