LeetCode算法题解

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

2019-07-06  本文已影响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;

}

上一篇下一篇

猜你喜欢

热点阅读