3. Longest Substring Without Repeating Characters [Medium]
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given"abcabcbb"
, the answer is"abc"
, which the length is 3.
Given"bbbbb"
, the answer is"b"
, with the length of 1.
Given"pwwkew"
, the answer is"wke"
, with the length of 3. Note that the answer must be asubstring,"pwke"
is asubsequenceand not a substring.
Analyse:
一開始直覺會用雙重迴圈去計算, 但結果Time Limit Exceeded...
用兩個指標: left與right去紀錄目前不重複的String,
長度length = right - left + 1;
並用一個dictionary記錄每個char最右邊的Index,
若目前right位子的char存在於dictionary,
則left = char存在於dictionary的index + 1.
直接看code會比較好理解.
Solution:
func lengthOfLongestSubstring(_ s: String) -> Int {
var maxLength = 0;
let chars = Array(s);
var left = 0;
var right = 0;
var records:[Character: Int] = [:]
while(right < chars.count) {
let char = chars[right];
if(records[char] != nil) {
left = max(records[char]! + 1, left);
}
records[char] = right;
maxLength = max(maxLength, right - left + 1);
right += 1;
}
return maxLength;
}