3. Longest Substring Without Repeating Characters

  • curLen = j - i + 1
class Solution {
public:
    int lengthOfLongestSubstring(string s)
    {
        int curLen = 0, maxLen = 0;

        unordered_map<char, int> m;

        int left = 0;
        for (int right = 0; right < s.size(); ++right)
        {
            if (m.count(s[right]))
            {
                // 如果發現重複字元,則更新左邊界
                left = max(left, m[s[right]]);
            }
            curLen = right - left + 1;
            maxLen = max(maxLen, curLen);
            // 更新右邊界的位置為 right + 1
            m[s[right]] = right + 1;
        }
        return maxLen;
    }
};
  • T: O(N)O(N)
  • S: O(min(M,N))O(\min(M, N))