1. 程式人生 > >【LeetCode】無重復字符的最長子串

【LeetCode】無重復字符的最長子串

self ret ges wke 遍歷 pytho int urn python

給定一個字符串,找出不含有重復字符的最長子串的長度。

示例:

給定 "abcabcbb" ,沒有重復字符的最長子串是 "abc" ,那麽長度就是3。

給定 "bbbbb" ,最長的子串就是 "b" ,長度是1。

給定 "pwwkew" ,最長子串是 "wke" ,長度是3。請註意答案必須是一個子串,"pwke"子序列 而不是子串。

解題思路:

1. 給兩個數組分別存儲最長子串和當前子串

2.遍歷字符串,只要字符不在當前子串中就添加進去

3.判斷當前子串跟最長子串的長度,如果當前串大於最長串,就把最長串替換掉

4.如果字符在當前串存在,就以這個字符在當前串的位置進行切片,切片完成再添加這個字符

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        cur_str = [];
        sum_str = [];
        for i in s:
            if not i in cur_str:
                cur_str.append(i)
            else:
                cur_str = cur_str[cur_str.index(i)+1:]
                cur_str.append(i)
            if len(cur_str) > len(sum_str):
                sum_str = cur_str
        return len(sum_str)

  

【LeetCode】無重復字符的最長子串