Leetcode【03】無重復(fù)字符的最長子串(Python)

題目

給定一個字符串 s ,請你找出其中不含有重復(fù)字符的 最長子串 的長度
示例 1: 輸入: s = "abcabcbb"。 因為無重復(fù)字符的最長子串是 "abc",所以其長度為 3。
示例 2: 輸入: s = "bbbbb"。因為無重復(fù)字符的最長子串是 "b",所以其長度為 1。
示例 3: 輸入: s = "pwwkew"。因為無重復(fù)字符的最長子串是 "wke",所以其長度為 3。

思路

  1. 設(shè)置臨時字符temp,初始為空"",最長子串長度MaxLength,初始為0;
  2. 遍歷輸入字符s(i=0),
    ?2-1. 若s[i]不在temp中,則將s[i]加入temp;
    ?2-2. 否則
    ???記錄當前temp長度tempLength,若大于MaxLength則更新MaxLength
    ???移除temp中已有s[i]及之前的元素,添加s[i],作為新的temp
    ?2-3. i++

實現(xiàn)

class Test:
    def __init__(self):
        pass

    def getL(self, li):
        maxL = 0; temp_maxL = 0
        i = 0
        temp=[]
        while i<len(li):
            if li[i] in temp:  # 第i個元素重復(fù)存在
                index = temp.index(li[i])
                temp = temp[index+1:]  # 刪除重復(fù)元素及其前面的部分
                temp.append(li[i])  # 末尾添加
                maxL = temp_maxL if maxL < temp_maxL else maxL  # 更新長度
            else:
                temp.append(li[i])  # 末尾添加
            temp_maxL = len(temp)
            # print(i, temp)
            i += 1
        maxL = temp_maxL if maxL < temp_maxL else maxL  # 最后一個元素經(jīng)過else
        return maxL

if __name__ == "__main__":
    Mlength = Test().getL("pwwkewa")
    print(Mlength)


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容