[LeetCode] 3. Longest Substring Without Repeating Characters

Chobby·2024년 8월 1일
1

LeetCode

목록 보기
40/194

해쉬맵을 사용하여 해당 알파벳이 등장한적이 있는지를 판별하고, 이미 등장한 알파벳이 나왔다면 시작점을 해당 알파벳의 인덱스로 부여한 후 재개한다

시간복잡도는 O(n) 선형 그래프이다.

function lengthOfLongestSubstring(s: string): number {
    // 문자의 마지막 등장 위치를 저장하는 Map
    const lastSeen = new Map<string, number>();
    let start = 0; // 현재 부분 문자열의 시작 인덱스
    let maxLength = 0; // 가장 긴 부분 문자열의 길이

    // 문자열을 순회하며 각 문자를 확인
    for (let end = 0; end < s.length; end++) {
        const char = s[end];
        
        // 현재 문자가 이미 등장했고, 그 위치가 현재 부분 문자열의 시작 이후라면
        if (lastSeen.has(char) && lastSeen.get(char)! >= start) {
            // 시작 위치를 이전에 등장한 위치 다음으로 이동
            start = lastSeen.get(char)! + 1;
        } else {
            // 현재까지의 부분 문자열 길이와 최대 길이를 비교하여 업데이트
            maxLength = Math.max(maxLength, end - start + 1);
        }
        
        // 현재 문자의 위치를 Map에 저장 또는 업데이트
        lastSeen.set(char, end);
    }

    return maxLength;
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글