leetcode question3.Longest Substring Without Repeating Characters

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


解答1:

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        HashSet<String> arr = new HashSet<String>();
        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<String, Integer> arr = new HashMap<String, Integer>();//<字符->位置>
        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;
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值