給定乙個字串,請找出其中無重複字元的最長子字串。 樣例
例如,在"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。思路 我們遍歷字串,計算以每乙個字元開頭的所有無重複子串的長度,最後比較這些長度,找出最大的乙個。在每一次的迴圈中,我們用雜湊表來統計有無重複的字元。本...