跳至主要内容

3. Longest Substring Without Repeating Characters

  • 滑動視窗的大小不固定的例子。
  • 搭配 HashMap 儲存滑動視窗的 Index。
  • 初始值:curLen, maxLen, 左右滑動視窗的邊界 ij
  • for loop 移動右邊界 j,如果發現重複的字元,更新左邊界 i
  • curLen = j - i + 1
  • 不斷取最大的 maxLen 值。
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))