力扣刷题_无重复字符的最长字符串

题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

原本的想法:暴力法

List_str = s

List1,List2,List_tem,Len_list2,Len_list_tem

从List_str中依次拿出字符放入List1,如果拿出的字符==List1中的任一字符,则放入List2并Len_list+1

记录字符在List1中的index,并再次从List_str中拿字符并比较List1中的index+1的字符

如果相等则继续放入List2并Len_list+1,如果不等则:1.将List2 concate 到List1 2. List_tem = List2 3.List2置空 4.将新元素放入List1

如果再一次置空List2时List_tem不为空,则判断如果Len_list2>Len_list_tem,则List_tem=List2,Len_list_tem=Len_list2

上面写的太垃圾了,看看别人写的:

        st = {}
        i, ans = -1, 0
        for j in range(len(s)):
            if s[j] in st:
                i = max(st[s[j]], i)
            ans = max(ans, j - i)
            st[s[j]] = j
        return ans
        #字典st记录了字符出现的位置,两个相同字符之间的距离
        #i代表了新不重复字符串在字典st的起始位置

 

你可能感兴趣的:(力扣刷图)