每日一題 最長不重複字串

2021-10-02 10:52:08 字數 909 閱讀 7285

演算法的關鍵之處在於要不斷比對後面的字元與前面字串之間有沒有重複,所以提高效率也在這裡。

暴搜的方法不贅述,複雜度

滑動視窗

提速的方法在於如何簡化比對這一過程,自然的,使用hashset建立乙個查集就可以了,每次只要查詢當前字元是否在前面串中(由hashset建立),這樣在使得空間複雜度為

python**如下:

class solution:

def lengthoflongestsubstring(self, s: str) -> int:

max_count = 1

length = len(s)

if length == 0:

return 0

for i in range(length):

count = 1

# 滑動視窗

win = s[i:i+1]

for j in range(i+1, length):

if s[j] in win:

break

win = s[i:j+1]

count += 1

if count > max_count:

max_count = count

return max_count

更進一步

進一步優化演算法,每次我們在滑動視窗是s[i,j]的j'位置發現了與當前查詢字元重複之後,可以直接將i跳到j'開始接下來的遍歷。這是因為從i到j'之間的字串開始的滑動視窗最終找到的最長不重複子串都必定小於從i開始的滑動視窗(因為他們最終都會遇到j處的字元)

最長不重複字串

一直以為這個方法是對的,後來發現這種方法是錯誤的,不能處理巢狀的情況,如 adercijckega 稍後再修正!最近面試遇到這題,再網上參考了一些blog,自己歸納出方法並用c 實現。問題 求出字串中最長不重複的字串,如 abccdefgchi 最長不重複字串為defgchi.分析 1.定義乙個二維...

最長不重複字串

程式設計 給定兩個字串a,b 只包含26個英文本母 輸出所有公共的最長子字串 如果出現重複子串,則輸出多次 輸入包括兩行,每行為乙個連續字串 大小寫敏感 輸出包括多行,每行為掃瞄到的最長公共子串,按照該子串在字串a 即第一行輸入字串 中出現的先後次序輸出 abcxyzabcrst opqrstabc...

每日一題 無重複字元的最長子串

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...