最長不重複子串

2021-09-21 12:57:47 字數 904 閱讀 4233

最長不重複子串就是從乙個字串中找到乙個連續子串,該子串中任何兩個字元都不能相同,且該子串的長度是最大的。

每個測試用例的輸入由一行小寫英文本母a,b,c...,z組成,字串的長度不超過10000.

example:input: abcdaba

output:4 abcd

c++ 實現:

#include #include//#includeusing namespace std;

int main()

; flag[str[0] - 'a'] = 1;

for (; j <= length && i <=length - max;)

j++;

} else

} cout <<"max_substring:"<< strm《思想是就是設定兩個指標i,j,並且設立標誌陣列flag,用於記錄陣列是否出現過,如果出現則將標誌位置為1,否則為0.這樣兩個掃瞄指標i,j分別位於左右,j向右掃瞄,如果該字母所對應的標誌位是0,則將其置為1,並且最長子串的長度加1,繼續向右掃瞄,當遇到乙個字母的標誌位為1時,將i指標向右移動,並且將相應的字母的標誌位置為0,在掃瞄的過程中,同時記錄最大長度,如果當前長度超過記錄的最大長度,就將新的最大長度賦值給記錄最大長度的變數,這樣完成一遍掃瞄即可完成找到最長不重複子串。

下面是乙個可以處理所有可能字元的版本:

#include#includeusing namespace std;

int main();

int i=0,j=0;

int temp=0,max=0;

for(;jmax)

j++;

} else

} cout《這裡增加了標誌陣列的長度,並將其擴充為表示所有可以顯示的字元,從空格的ascii碼32開始表示,到ascii碼127,共96個字元。

最長不重複子串

出處 勇幸 thinking 題 從乙個字串中找到乙個連續子串,該子串中任何兩個字元不能相同,求子串的最大長度並輸出一條最長不重複子串。本節從最直接的方法逐步優化,漸進探索了四種實現方式,並最終找到時間複雜度為o n 輔助空間為常數的方案,內容如下 基本演算法 使用hash dp方案 dp hash...

最長不重複子串

演算法參考 找到乙個字串中的乙個連續子串,這個子串內不能有任何兩個字元是相同的,並且這個子串是符合要求的最長的。例如輸入 abcbef 輸出 cbef o n 的演算法,具體思路如下 以abcbef這個串為例,用乙個陣列pos記錄每個元素曾出現的下標,初始化為 1。從s 0 開始,依次考察每個字元,...

最長不重複子串

題目鏈結 給定乙個字串,找到最長的子串,要求該子串中沒有重複的字元。例如 字串abcabcbb的不含重複字元的 最長 子串為abc,長度為 3。而bbbbbb的不含重複字元的 最長 子串為b,長度為 1。輸入格式 輸入包含多行,每一行對應乙個長度不超過 100 的輸出,直到遇到結束符為止。每行依次輸...