請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。
示例 3:
輸入: "pwwkew"
輸出: 3
解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是乙個子串行,不是子串。
暴力法:將字串中的每個字元儲存到字串ss中,然後判斷字串s中的每個字元是否出現在字串ss中,即是否重複。
雜湊表:使用雜湊表記錄每個字元的下乙個索引,然後向右移動右指標right來拓展滑動視窗的大小,並更新視窗的最大長度res。如果右指標right指向的元素s[right]重複,則將左指標left直接移動到視窗中重複元素的右側。
set去重:使用set對字串s去重,如果當前字元未出現在set中,則end右移,並把該字元插入set中,否則遇到重複元素,則從set中刪除。
雙指標:使用快慢指標,從左往右移動滑動視窗,判斷快指標right指向的元素是否出現在滑動視窗內,如果視窗內沒有該元素,則將該元素加入滑動視窗,同時更新視窗長度最大值,否則如果視窗存在該元素,即遇到重複元素,移動慢指標left,直到視窗中不包含該元素。
暴力
class solution雜湊表if(ss.size() > res) res = ss.size();
}return res;}};
class solutionset去重mp[s[right]] = right;
right++;
res = max(right - left, res);
}return res;}};
class solution雙指標count_ch.insert(s[i]);
end++;
res = max(end - begin, res);
}return res;}};
class solution參考文章res = max(i - right + 1, res);
}return res;}};
面試題48 最長不含重複字元的子字串
請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度。假設字串中只包含a z的字元。例如,在字串 arabcacfr 中,最長的不含重複字元的子字串是 acfr 長度為4。我們定義函式f i 表示以第i個字元為結尾的,不包含重複字元的子字串的最長長度。我們從左到右逐一掃瞄字串中的每...
面試題48 最長不含重複字元的子字串
題目描述 請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pw...
面試題48 最長不含重複字元的子字串
題目 請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度。示例 示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 p...