LintCode 384 最長無重複字元的子串

2021-08-07 12:22:37 字數 1261 閱讀 3357

給定乙個字串,請找出其中無重複字元的最長子字串。 樣例

例如,在"abcabcbb"中,其無重複字元的最長子字串是"abc",其長度為3

對於,"bbbbb",其無重複字元的最長子字串為"b",長度為1

思路:[pre,i]表示乙個無重複子串,用hash表記錄子串中每個字元的出現次數。初始pre = 0,i = 0,i從左往右掃瞄字串,maxlength儲存當前最大長度。

每掃瞄乙個字元,根據對應的值來判斷這個字元是否已經出現。

如果a[i]已存在, 將pre與當前字元a[i]位置的下乙個位置進行比較,選擇最大者作為最新pre所指位置,然後再更新maxlength;

如果不存在,則繼續掃瞄,

(i - pre + 1)與最大長度進行比較,更新maxlength。   

將a[i]以及對應的位置i儲存,更新字元最近出現的位置。

比如:abba

(1)初始:maxlength=0;

(2)abba:map中不含該字元, now 指向第乙個a; map中新增該字元及其位置,; maxlength=1;

(3)a

bba: map中不含該字元,now指向第乙個a; map中新增該字元及其位置,; maxlength=2;

(4)ab

ba: map中含有相同字元b,now更新,指向2  ;map中更新該字元及其位置,; maxlength=1;

(5)abb

a:map中含有該字元,更新map種該字元最新位置,;now指向第二個b,maxlength=2;

class distinctsubstring  

maxlength = max(maxlength, i-pre+1);//更新最長字串的長度

m[a[i]]=i;//修改當前字元的value,記錄最新位置

} return maxlength;

}};

另一種類似:

int longestsubstring(string a, int n) 

max = max(max, i - start + 1);

m[c] = i; //map新增資料 mapstudent[char] = int

}

return max;

}

lintcode 384 最長無重複字元的子串

給定乙個字串,請找出其中無重複字元的最長子字串。樣例例如,在 abcabcbb 中,其無重複字元的最長子字串是 abc 其長度為 3。對於,bbbbb 其無重複字元的最長子字串為 b 長度為1。挑戰o n 時間 標籤雜湊表 字串處理 兩根指標 思路參考 遍歷該字串,每遍歷乙個字母時,利用map去找該...

最長無重複字元的子串 LintCode

給定乙個字串,請找出其中無重複字元的最長子字串。樣例 例如,在 abcabcbb 中,其無重複字元的最長子字串是 abc 其長度為 3。對於,bbbbb 其無重複字元的最長子字串為 b 長度為1。挑戰 o n 時間 思路 遍歷字串,對於每個字元計算長度和起始位置,若在已遍歷的字串中不存在,則起始位置...

最長無重複字元子串

給定乙個字串,求出其最長的無重複的字元子串的長度。例 給定字串str abcdahisjgdb 則其最長無重複子串為 bcdahisjg 長度為9。思路 我們遍歷字串,計算以每乙個字元開頭的所有無重複子串的長度,最後比較這些長度,找出最大的乙個。在每一次的迴圈中,我們用雜湊表來統計有無重複的字元。本...