문제

풀이

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int n = s.size();
        unordered_map<char, int> m; // 현재 윈도우 내에 있는 문자 - 인덱스
        int maxLen = 0;
        int l = 0;
        for (int r = 0; r < n; ++r)
        {
            if (m.contains(s[r])) // 중복된 문자를 찾은 경우
            {
                l = max(m[s[r]] + 1, l); // 해당 문자가 l보다 뒤에 있다면 l을 거기로 옮김
            }

            m[s[r]] = r; // s[r]의 위치 업데이트

            maxLen = max(maxLen, r - l + 1);
        }

        return maxLen;
    }
};

처음에는 비효율적으로 풀었다가, AI의 도움을 받아서 투 포인터 기반 풀이로 수정했다.

배운 점과 후기

음, 투 포인터라고 해서 항상 while (l < r)을 떠올리면 안되겠다.

이 포스트는 달레 스터디(7주차)에서 진행한 Blind 75 문제집 풀이의 일부입니다.

댓글남기기