LeetCode-无重复字符的最长子串

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

示例:

给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。

给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。

给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串"pwke" 是 子序列  而不是子串。


解题思路:

这道题wa了挺久的挺尴尬的,考虑的场景不全,总是有漏子。

随便说一下思路吧,解题思路可以是双重遍历然后加map做判定存储,每次遍历clear一下 这样做也行,但是就是挺耗费性能的。

然后如果要在O(n)时间内完成,就要想一下啦。其实是不是可以这么想:

(1)对于遇到重复的字符串进行下判定,输出此时的子串的长度。

(2)但是还是得循环体内每次判定下,不然abcd等没有重复节点会有问题呢。

(3)这样做还是有问题呀,需要考虑下遇到abcdba这种情况。所以有了以下代码



class Solution {
    public int lengthOfLongestSubstring(String s) 
    {
    	int maxNum=0;
    	int indexStart=0;
    	int length =s.length();
    	Map<Character,Integer> map = new HashMap<>();
    	
    	for(int i=0;i<length;++i)
    	{
    		char c =s.charAt(i);
    		if(map.containsKey(c)&&map.get(c)>=indexStart)
    		{
    			indexStart =map.get(c)+1;
    		}
    		map.put(c, i);
    		maxNum=Math.max(maxNum, i-indexStart+1);
    		
    	}
  
    	
    	return maxNum;
        
    }
}

猜你喜欢

转载自blog.csdn.net/s695540301/article/details/80330816