LeetCode每天一题Longest Substring Without Repeating Characters(最长无重复的字串)
Posted goodrnne
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode每天一题Longest Substring Without Repeating Characters(最长无重复的字串)相关的知识,希望对你有一定的参考价值。
Given a string, find the length of the longest substring without repeating characters.
Example 1: Input: "abcabcbb" Output: 3 Explanation: The answer is "abc"
, with the length of 3.
Example 2: Input: "bbbbb" Output: 1 Explanation: The answer is "b"
, with the length of
Example 3: Input: "pwwkew" Output: 3 Explanation: The answer is "wke"
, with the length of 3.
Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
对于这道题最简单的方法我们可以使用暴力破解法,尝试所有可能的搜索字串,然后得出最大的不重复字串,但是这种解法复杂度太高,遇到比较长的字符串时,可能直接TimeOut了,所以尝试有没有其他解法。
时间复杂度为O(n), 空间复杂度为O(n)(字典存储所耗费的空间较大,也估计为O())
1 class Solution(object):
2 def lengthOfLongestSubstring(self, s):
3 """
4 :type s: str
5 :rtype: int
6 """
7 if len(s) < 2:
8 return 1 if len(s) == 1 else 0
9 index, max_count = 0, 0 # 设置标志量和最大长不重复字段的数目
10 tem_dict, count = {}, 0 # 设置辅助空间字典和当前的技术器
11 for i, char in enumerate(s): # 冲头开始遍历
12 if char in tem_dict and tem_dict[char] >= index: # 如果当前字符在字典中并且字典中的下标大于等于标志量下标(标志量表示从哪一个字符开始计算的)
13 max_count =max(count,max_count) # 求出最大的数
14 count = i - tem_dict[char] # 算出第一个出现重复的字符串当第二次出现时的距离数。
15 index = tem_dict[char]+1 # 将标志量设置到第一次出现重复字符串的下一个。
16 else:
17 count += 1 # 无重复字符出现,计数加1
18 tem_dict[char] = i # 记录当前字符串下标
19 return max(count, max_count) # 返回最大的距离数
以上是关于LeetCode每天一题Longest Substring Without Repeating Characters(最长无重复的字串)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode每天一题Next Permutation(下一个排列)