傳送門:無重復字符的最長子串
Problem/題意
給一個由英文、數字、符號、空格組成的字符串,找出其中不含有重復字符
的最長子串
的長度。
比如:abb 包含了重復字符 b;abc 沒有包含重復字符。
注意是子串,不是子序列。
Thought/思路
要知道一個區間內是否包含了重復字符,我們可以用 哈希
來保存現有字符的存在情況。
不斷擴大數組長度,當遇到重復字符的時候就停止擴大,然后結算一次答案。
最后移動左指針的時候將其對應字符標記為未訪問
即可。
Code/代碼
class Solution {
public:int lengthOfLongestSubstring(string s) {std::map <char, int> mp;int ans = 0;for (int l = 0, r = -1; l < s.length(); ++ l) {while (mp[s[r + 1]] != 1 && r + 1 < s.length()) {mp[s[++ r]] = 1;}ans = std::max(ans, r - l + 1);mp[s[l]] = 0;}return ans;}
};