[34] 반복되는 문자가없는 가장 긴 부분 문자열 (LeetCode 3)

반복되는 문자가없는 가장 긴 부분 문자열

문제 설명

문자열이 주어지면 반복되는 문자를 포함하지 않는 가장 긴 부분 문자열의 길이를 찾으십시오.

문제 해결 생각

unorder_set 사용 :


unorder_set <int> c1; // 정의 c1.empty (); // 비어 있는지 확인
c1.size (); // 요소의 수를 얻습니다 size ()
c1.max_size (); // 최대 저장 용량을 얻습니다 max_size ()
c1.find (key); // unorder_set의 find () 호출은 반복자를 반환합니다. 이 반복기는 매개 변수 해시 값과 일치하는 요소를 가리키며 일치하는 요소가 없으면 컨테이너의 끝 반복기 end ()를 반환합니다.
c1.insert (key); // Insert element
c1.erase (key); // 키 값에 따라 요소 삭제
c1.clear (); // Empty
c1.count (key) // 컨테이너의 요소

슬라이딩 윈도우의 개념 : 반복되지 않는 문자의 하위 문자열이 i 번째 문자로 시작한다고 가정하면 i 번째 문자는 창의 첫 번째 요소에 있습니다. 새로 추가 된 문자가 요구 사항을 충족하지 않을 경우 창이 오른쪽으로 이동합니다. i 번째 문자를 꽉 쥡니다.

class Solution {
    
    
public:
    int lengthOfLongestSubstring(string s) {
    
    
        int n=s.size();
        if(n == 0) return 0;
        unordered_set<char> lookup;
        int res = 0,start = 0;
        for(int i = 0; i < n; i++){
    
    
            while (lookup.find(s[i]) != lookup.end()){
    
     //若在容器中找到了相应的元素则执行
                lookup.erase(s[start]);
                start++;
            }
            res = max(res,i-start+1);
            lookup.insert(s[i]);
    }
        return res;
        
    }
};

추천

출처blog.csdn.net/qq_43424037/article/details/113730595