借助的排名第一的老哥Edwin_Xu的思路,只是解释了一下

找到字符串的最长无重复字符子串

http://www.nowcoder.com/questionTerminal/b56799ebfd684fb394bd315e89324fb4

借助的排名第一的老哥Edwin_Xu的思路,只是解释了一下

public int maxLength (int[] arr) {
    HashMap<Integer,Integer> map = new HashMap<>();
    int max = 1;
    for(int start = 0,end = 0; end<arr.length ; end++){
        if(map.containsKey(arr[end])){//true:出现元素重复
            //如果出现重复的元素在已知最长序列中,那么直接让起始位置等于重复元素位置;(start = map.get(arr[end])+1)
            //如果出现重复的元素在已知最长序列之前,那么起始位置不会发生改变
            //所以start = Math.max( map.get(arr[end])+1,start);
            start = Math.max( map.get(arr[end])+1,start);
        }
        //一般而言,最大长度max = end-start+1;但是如果出现元素重复,那么起始位置会发生改变,随着起始位置发生改变,
        //end-start+1不一定大于原来的最大长度max,所以需要取最大值
        max = Math.max(max,end-start+1);//记住一定要加1,单纯的求长度
        map.put(arr[end],end);
    }
    return max;
}
全部评论

相关推荐

野猪不是猪🐗:😇:恭喜你以出色的表现成为xxx的一员 😨:您以进入本公司人才库 实际点开:您愿望单中的xxx正在特卖!
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务