題目
給定一個字符串 s ,請你找出其中不含有重復(fù)字符的 最長子串 的長度
示例 1: 輸入: s = "abcabcbb"。 因為無重復(fù)字符的最長子串是 "abc",所以其長度為 3。
示例 2: 輸入: s = "bbbbb"。因為無重復(fù)字符的最長子串是 "b",所以其長度為 1。
示例 3: 輸入: s = "pwwkew"。因為無重復(fù)字符的最長子串是 "wke",所以其長度為 3。
思路
- 設(shè)置臨時字符temp,初始為空"",最長子串長度MaxLength,初始為0;
- 遍歷輸入字符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)