Longest Substring Without Repeating Characters

求最長不重複子字符串spa

題目來源:code

https://leetcode.com/problems/longest-substring-without-repeating-characters/blog

Given "abcabcbb", the answer is "abc", which the length is 3.leetcode

Given "bbbbb", the answer is "b", with the length of 1.字符串

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.get

1,兩個循環,複雜度O(n2)string

先外面一個循環,遍歷每一個的時候,再遍歷當前位置以後的全部字符串,設一個tmp用來存儲,若是發現重複的就break,可是這個容易TLEit

def find_long_norepeat_str(one_str):
    #沒經過,複雜度過高,兩個for循環,複雜度 O(n2)
    res_list=''
    length=len(one_str)
    for i in range(length):
        tmp=one_str[i]
        for j in range(i+1,length):
            if one_str[j] in tmp:
                break
            else:
                tmp+=one_str[j]
        if len(tmp)> len(res_list):
            res_list=tmp
    return res_list

2.不遍歷後面了,看前面的for循環

仍是先循環一遍 ,遍歷每一個的時候,找之前的字符串,如"abcabcbb",第一個abc正常跑,記錄數量res,到了第2個a的時候,發現以前有重複了a,那就從下一個位置開始find,cur記錄當前s[i]之前出現過的那個位置的,curbegin是記錄find從哪一個位置開始找,一旦發現有重複,curbegin在下一次循環中就後移了,res就是記錄  你當前的位置 - 搜索起點的位置,也就是最大不重複子串。複雜度要好點。class

def find_sonstr_lis(s):
    if len(s)<=1:
        return len(s)
    res=1
    curbegin=0
    for i in range(len(s)):
        cur=s.find(s[i],curbegin,i)
        if cur!=-1:
            if i-curbegin>res:
                res=i-curbegin
                value=s[curbegin:i]
            curbegin=cur+1
    if s.find(s[-1],curbegin,len(s)-1)==-1:
        res=max(res,len(s)-curbegin)
    return  res
相關文章
相關標籤/搜索