⚙️ Problem Solving/Algorithm - Python

[LeetCode | Python] 3. Longest Substring Without Repeating Characters

yesolz 2024. 11. 24. 19:14
728x90
Given a string s, find the length of the longest substring without repeating characters.

반복되는 문자 없이 가장 긴 substring의 길이를 찾는 문제!

substring은 시작과 끝이 정의된 유동적인 범위이므로,

상황에 따라 범위(윈도우)를 늘리거나 줄이는 슬라이딩 윈도우 풀이를 떠올릴 수 있다. 

 

 

풀이 : Sliding Window

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        charSet = set()
        l = 0
        res = 0

        for r in range(len(s)):
            while s[r] in charSet:
                charSet.remove(s[l])
                l += 1
            charSet.add(s[r])
            res = max(res, r - l + 1)
        return res
  • charSet: 중복 검사를 위한 집합(set)
  • l (왼쪽 포인터): 현재 확인 중인 substring의 시작
  • r (오른쪽 포인터): 문자열 탐색하며 현재 문자를 가리킴

 

1. 중복 문자가 있는 경우

  • s[r]이 이미 charSet에 있다면, 중복을 제거하기 위해 charSet.remove(s[l])로 문자를 제거하고, l 포인터를 오른쪽으로 이동
  • s[l:r] 부분 문자열이 다시 중복 없는 상태가 될 때까지 반복

2. 중복 없는 경우

  • 현재 문자 s[r]을 charSet.add(s[r])로 추가
  • 이후 현재 구간의 길이를 계산하여 res에 최댓값을 갱신

 

r포인터가 문자열 전체를 한 번만 순회하고 l 포인터도 최대 n번 이동하므로 시간 복잡도는 O(n)이다.

공간 복잡도는 문자 집합의 크기가 k라고 했을 때 O(k)이다.

 

 

 

728x90