借助的排名第一的老哥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;
}
全部评论

相关推荐

某服饰品牌 管培生 税前7500,六险一金
点赞 评论 收藏
分享
10-18 13:01
已编辑
西安理工大学 C++
小米内推大使:建议技能还是放上面吧,hr和技术面试官第一眼想看的应该是技能点和他们岗位是否匹配
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务