题解 | #最长不含重复字符的子字符串#

最长不含重复字符的子字符串

http://www.nowcoder.com/practice/48d2ff79b8564c40a50fa79f9d5fa9c7

动态规划+哈希表,看到很多题解都用了数组来保存当前为结尾的最长结果,其实可以更加优化。当出现重复字符时,只需要更新最近的相同字符作为长度计算起点,然后每次更新最长不同字符字串长度值即可

        int start = -1, sub = 1;
        //哈希表存储字符和字符位置的对应关系
        HashMap<Character,Integer> chara = new HashMap<Character,Integer>();
        //遍历字符串
        for(int i = 0;i < s.length();i++){
            if(chara.containsKey(s.charAt(i))){
                //更新最近的相同字符作为长度计算起点
                start = Math.max(start,chara.get(s.charAt(i)));
            }
            chara.put(s.charAt(i),i);
            //更新最长不同字符字串长度值
            sub = Math.max(sub,i - start);
        }
        return sub;
    
全部评论

相关推荐

06-27 18:45
中山大学 Ruby
25届应届毕业生,来广州2个礼拜了,找不到工作,绝望了,太难过了…
应届想染班味:9爷找不到工作只能说明,太摆了或者太挑了。
点赞 评论 收藏
分享
真烦好烦真烦:豆包润色了自己没看看吗,再说了,都说豆包是愚蠢且勤快的大学生,ds才是聪明的研究生,怎么敢让豆包写论文的
你们的毕业论文什么进度了
点赞 评论 收藏
分享
下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
评论
12
1
分享

创作者周榜

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