美文网首页LeetCode算法题解
LeetCode算法第3题:无重复字符的最长子串

LeetCode算法第3题:无重复字符的最长子串

作者: 小天使淘淘 | 来源:发表于2019-07-06 00:34 被阅读0次

    问题描述:

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

    示例 1:

        输入: "abcabcbb"

        输出: 3

        解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

    示例 2:

        输入: "bbbbb"

        输出: 1

        解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

    示例 3:

        输入: "pwwkew"

        输出: 3

        解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。

    思路:

        找出不含有重复字符的最长子串,实际就是在字符串中截取子串,这个子串中没有重复的字符。我们可以使用一个HashMap来记录字符串中的元素和它对应的位置下标,从而可以在遍历字符串的时候能够通过map的key值来判断是否存在重复元素。然后定义一个子串的起始位置,并开始对字符串进行遍历。在遍历的过程中,如果hashMap的key集合中已经包含了正在遍历的元素,说明从重复的key对应的下标到当前元素的下标对应的子串中存在重复元素,判断这个子串长度是否是当前最长长度,是的话进行更新,然后从重复元素对应下标的下一个位置重新开始计算;如果遍历过程中,hashMap的key集合中一直没有包含正在遍历的元素,更新子串最大长度。

    java语言实现:

    public int lengthOfLongestSubstring(String s) {

        int result = 0;

        if(null == s || s.length() == 0) {

            return result;

        }

        HashMap map = new HashMap();

        int start = 0;

        for(int i=0; i

            if(map.containsKey(s.charAt(i))){

                start = Math.max(start,map.get(s.charAt(i)) + 1);

            }

            map.put(s.charAt(i),i);

            result = Math.max(result,i - start + 1);

        }

        return result;

    }

    相关文章

      网友评论

        本文标题:LeetCode算法第3题:无重复字符的最长子串

        本文链接:https://www.haomeiwen.com/subject/mphuhctx.html