本文转载自【微信公众号:机器学习算法与Python精研,ID:AITop100】经微信公众号授权转载,如需转载与原文作者联系
题目:
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。
给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。
给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 而不是子串。
思路:
采用切分的方式,遇到重复字符时,记录无重复字符的长度,把前面的所有字符串“丢掉”然后以这个起点重新开始做切分,再遇到相同字符得到的长度与前面对比,取最大值,往复的到。
参考代码:
classSolution:deflengthOfLongestSubstring(self, s):""" :type s: str :rtype: int """ d = {} start = ans = for i,c in enumerate(s):if c in d: start = max(start, d[c] + 1) d[c] = i ans = max(ans, i - start + 1)return ans