Algorithm/슬라이딩 윈도우

리트코드 3. 반복되는 문자가 없는 가장 긴 부분 문자열 c++ // 슬라이딩 윈도우

Mini_96 2024. 6. 21. 01:22

https://leetcode.com/problems/longest-substring-without-repeating-characters/description/

* 의사코드

1. map에 해당문자의 등장횟수기록

2. 해당문자가 2회이상등장 -> 등장횟수가1이 될때까지 l을 우측으로 조정

3. 모든 중복문자없는 부분문자열을 탐색하면서 그때의 최대값을 ret에 저장함

* 전체코드

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_map<char,int> m; //m[a]=2, a의 등장횟수가2임

        int r=0,l=0,n=s.size(), ret=0;

        while(r<n){
            m[s[r]]++; //해당 문자의 등장횟수++
            while(m[s[r]]>1){ //2회이상인경우, 1회가되도록 조정해야함
                m[s[l]]--; //좌측을 조정
                l++;
            }
            ret=max(ret,r-l+1);
            r++;
        }
        return ret;
    }
};