File tree Expand file tree Collapse file tree 2 files changed +80
-0
lines changed
longest-repeating-character-replacement Expand file tree Collapse file tree 2 files changed +80
-0
lines changed Original file line number Diff line number Diff line change 1+ /*
2+ s는 영어 대문자만 포함 : 26의 크기를 가진 vector counts에 빈도 저장
3+
4+ left, right 통해 슬라이딩 윈도우 기법 적용
5+
6+ 1. right 위치의 문자 빈도 수를 증가시키고 maxCnt를 업데이트한다
7+ - maxCnt는 현재까지 윈도우를 움직이면서 윈도우 내에 한가지 문자의 최대 빈도수
8+
9+ 2. (윈도우의 크기 - maxCnt) > k일 때 최대 대체 가능한 문자의 수를 넘어섰으므로 윈도우의 크기를 줄임
10+ : s[left]의 빈도 감소 및 left를 전진
11+
12+ 3. ans는 max(현재 윈도우의 크기, 기존 최대 크기 ans) 로 업데이트
13+
14+
15+ - ans의 증가는 maxCnt가 증가 | 최대빈도문자와 다른 문자가 k개 이하일 때 -> (maxCnt ~ maxCnt + k)로 업데이트
16+ 이 때는 while 루프를 수행하지 않음
17+
18+ - while (right - left + 1 - maxCnt > k) -> 실제 이 조건을 만족하는 윈도우에서는 대체해야할 문자가 k보다 많이 존재할 수도 있다
19+ 다만 윈도우의 크기를 maxCnt + k개로 제한하기 때문에 실제 답보다 더 크게 업데이트 될 수 없다
20+ 매번 윈도우 내의 최대빈도문자를 계산하지 않아도 되기 때문에 살짝 최적화 O(26n) -> O(n)
21+
22+ s의 길이 : N
23+
24+ TC : O(N)
25+
26+ SC : O(1)
27+ 상수(26) 크기의 배열
28+ */
29+
30+ #include < string>
31+ #include < vector>
32+ using namespace std ;
33+
34+ class Solution {
35+ public:
36+ int characterReplacement (string s, int k) {
37+ vector<int > counts (26 , 0 );
38+ int left = 0 , right = 0 , maxCnt = 0 , ans = 0 ;
39+
40+ for (; right < s.size (); right++) {
41+ maxCnt = max (maxCnt, ++counts[s[right] - ' A' ]);
42+
43+ while (right - left + 1 - maxCnt > k) {
44+ --counts[s[left] - ' A' ];
45+ left++;
46+ }
47+ ans = max (ans, right - left + 1 );
48+ }
49+ return ans;
50+ }
51+ };
Original file line number Diff line number Diff line change 1+ /*
2+ 풀이 :
3+ n & 1 -> n의 오른쪽 첫번째 비트 -> ans에 더한다
4+ n >> 1 & 1 -> n의 오른쪽 두번째 비트 -> ans를 << 1 해준뒤 더한다
5+ ...
6+
7+ n의 오른쪽 끝자리부터 ans에 더해져서 << 연산에 의해 좌측으로 가기 때문에 비트를 뒤집을 수 있다
8+
9+ TC : O(1)
10+ 32번
11+
12+ SC : O(1)
13+ s*/
14+
15+ #include < stdint.h>
16+
17+ class Solution {
18+ public:
19+ uint32_t reverseBits (uint32_t n) {
20+ uint32_t ans = 0 ;
21+
22+ for (int i = 0 ; i < 32 ; i++) {
23+ ans <<= 1 ;
24+ ans += n & 1 ;
25+ n >>= 1 ;
26+ }
27+ return ans;
28+ }
29+ };
You can’t perform that action at this time.
0 commit comments