提出問題:給定一個字符串,請你找出其中不含有重複字符的最長子串的長度。
示例:"abbcc" --> "ab" or "bc"、"abcadef" --> "adef"
解決思路:使用蠻力算法算法很容易實現,但是時間複雜度爲O(n^2)。本題可以通過一次遍歷完成,比如"abcadef",正常遍歷,如果當前遍歷字符不在字符串中,將它添加至字符串;當遍歷到第2個a時,發現重複,此時截取第1個a後的第一個字符開始到第2個a爲新字符串,並比較最大長度,依此類推。
a --> ab --> abc -a重複-> bca --> bcad --> bcade --> bcadef
代碼如下( ̄▽ ̄):
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
if len(s) == 0:
return 0
st = ''
length = 0
for i in range(len(s)):
if s[i] not in st:
st+=s[i]
length=length if(length>len(st)) else len(st)
else:
st = st[st.find(s[i])+1:] + s[i]
return length
時間與空間複雜度佔用: