LeetCode Question 3

Question 3

Given a string, find the length of the longest substring without repeating characters.

Example

Input: "abcabcbb"
Output: 3 
#"abc"
Input: "bbbbb"
Output: 1
#"b"
Input: "pwwkew"
Output: 3
#"wke"

题目分析

输入:随意一个字符串。
处理:找到字符串中连续出现的不重复的最长子字符串的长度,比如例子中的最后一个“pwwkew”,如果要找不重复最常字符应该是pkew,但是pkew不是原字符串的子字符串。
输出:最长子字符串的长度。

检验设置

TDD(Test-driven development) analysis:

1. 最简单的情形是最长不重复的子字符串只有一个:
"abadabc"
>>>  4
#"dabc"
2. 最长不重复的子字符串有多个:
#"abcbcabc"
>>> 3
#"abc", "bca", "cab"

1.直接解法(Python3):

题中的最重要条件是字符不重复,所以最直接的解决方法就是从字符串第一个字符开始,把不重复字符放入python字典中,当某个字符重复,则更新字典中该字符的位置。

def lengthOfLongestSubstring(s):
    used = {}
    #存放出现的字符串的位置
    start = maxLength = 0
    #start记录子字符串的起始位置,maxLength记录最长子字符串的长度
    for i in range(len(s)):
        if s[i] in used and start <= used[s[i]]:
            start = used[s[i]] + 1
            #如果检索到出现过的字符,则子字符串的起始位置从上次记录的字符后面开始,以保证新的子字符串没有重复字符
        else:
            maxLength = max(maxLength, i - start + 1)
        used[s[i]] = i
    return maxLength       

时间复杂度O(n),依次分析了字符串中的所有字符;空间复杂度O(n),记录了字符串中所有不重复字符的最新位置。

    原文作者:Sisyphus235
    原文地址: https://www.jianshu.com/p/cb572ea86622
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞