From 05279602801aca2d7cb7c7563788c40d48968849 Mon Sep 17 00:00:00 2001 From: mmyeon Date: Fri, 24 Jan 2025 11:48:12 +0900 Subject: [PATCH] improve sliding window logic --- .../mmyeon.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/longest-substring-without-repeating-characters/mmyeon.ts b/longest-substring-without-repeating-characters/mmyeon.ts index 22e617041..d0bbbc6ae 100644 --- a/longest-substring-without-repeating-characters/mmyeon.ts +++ b/longest-substring-without-repeating-characters/mmyeon.ts @@ -34,3 +34,22 @@ function lengthOfLongestSubstring(s: string): number { return maxLength; } + +// Map 사용해서 중복 발생시 start 인덱스가 점프하도록 개선 +function lengthOfLongestSubstring(s: string): number { + let start = 0, + maxLength = 0; + const map = new Map(); + + for (let i = 0; i < s.length; i++) { + const char = s[i]; + // 중복 있는 경우, 중복문자의 다음 위치로 점프 + if (map.has(char)) start = Math.max(start, map.get(char)! + 1); + // 인덱스 갱신 + map.set(char, i); + + maxLength = Math.max(maxLength, i - start + 1); + } + + return maxLength; +}