无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

    private int lengthOfLongestSubstring(String s) {
        int n = s.length(), ans = 0;
        Map<Character, Integer> map = new HashMap<>();
        for (int end = 0, start = 0; end < n; end++) {
            char alpha = s.charAt(end);
            if (map.containsKey(alpha)) {//如果当前字符与之前的某个字符重复,需要更新start起始索引
                //从前一个字符串开始的位置后面取(就是说将原来字符串起始的位置从重复的字符位往后挪动了一位)
                start = Math.max(map.get(alpha), start);
            }
            ans = Math.max(ans, end - start + 1); //ans表示子串的长度,(当前子串的长度)
            map.put(s.charAt(end), end + 1); //键表示当前字符,值表示这个字符在字符串中的位置(从1开始)
        }
        return ans;
    }
全部评论

相关推荐

淬月星辉:专利是什么?至少描述一下吧,然后把什么计算机二级、普通话这种拉低格调的证书删掉,不然hr以为你没东西写
点赞 评论 收藏
分享
12-13 14:51
已编辑
井冈山大学 算法工程师
龙虾x:算法比你强的没有你美,比你美的…..算了已经没有比你美的了
工作两年想退休了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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