给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
*2个优化点:
(1)新字符开始的时候,确保串达到max_len才开始判断
(2)i,j 要一个个的遍历移动 [ 理解强迫症击破:j+1必须保证前面 i~j 没重复的才会向前移动 ]
1 [自a]暴力法 —— 超时 [ 通过测试用例966 / 987 个 ]
过程:2个for嵌套,1个个拼接出所有字串(慢在:每次换首字母要重新一个个加后面的字母拼)
优化:优化了(1),但每次到新首字母,都要for来拼接字符串 [ 底层知识:计算机识别字符串.get 这个字符串必须是合并整体的 ]
class Solution(object):
def bool_chongfu(self, s):
dict = {
}
"""关键简化思路:只有查找用hash且这个函数只是看有没有重复,len独立出去 因为没有查找!!"""
for i, str in enumerate(s):
if dict.get(str) == None: # 需要预先判断,因为dict.get只能取最后
dict[str]