字符串最长无重复子数组

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

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

这是之前的最大连续子数组和的变种,代码差不多。只不过是递推公式发生了变化,不再是直接清零就好了,反而是要拿到前面重复数字的后一位开始继续

public int maxLength (int[] arr) {
    // write code here

    if(arr==null || arr.length==0){
        return -1;
    }
    HashMap<Integer,Integer> map=new HashMap<>();
    int dp[]=new int [arr.length];
    for(int i=0;i<arr.length;i++){
        if(i==0){
            map.put(arr[i],i);
            dp[0]=1;
        }else{
            if(map.containsKey(arr[i])){
                int index=(int)map.get(arr[i]);
                map.clear();
                for(int j=index+1;j<=i;j++){
                    map.put(arr[j],j);
                }
            }else{
                map.put(arr[i],i);
            }
            dp[i]=Math.max(dp[i-1],map.size());
        }
    }
    return dp[arr.length-1];
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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