반복되는 문자가없는 가장 긴 부분 문자열
문제 설명
문자열이 주어지면 반복되는 문자를 포함하지 않는 가장 긴 부분 문자열의 길이를 찾으십시오.
문제 해결 생각
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;
}
};