File tree Expand file tree Collapse file tree 1 file changed +81
-0
lines changed
longest-repeating-character-replacement Expand file tree Collapse file tree 1 file changed +81
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * @param {string } s
3+ * @param {number } k
4+ * @return {number }
5+ */
6+ /*
7+ 문제 설명:
8+ 주어진 문자열 s와 정수 k가 주어진다.
9+
10+ 문자열 s는 대문자 영어 알파벳(A~Z)으로만 구성되어 있으며,
11+ 문자열의 길이는 최대 100,000이다.
12+
13+ 하나의 연산에서는 문자열 s의 임의의 문자 하나를 선택하여
14+ 다른 어떤 대문자 알파벳 문자로든 변경할 수 있다.
15+ 이 연산은 최대 k번까지 수행할 수 있다.
16+
17+ 목표는 연산을 최대 k번까지 수행한 후,
18+ 모든 문자가 동일한 가장 긴 연속 부분 문자열(substring)의 길이를 구하는 것이다.
19+
20+ 여기서 부분 문자열은 반드시 연속된 문자들로 이루어져야 하며,
21+ 문자열의 일부를 건너뛸 수는 없다.
22+
23+ 입력:
24+ - s: 대문자 영어 알파벳으로 이루어진 문자열
25+ - k: 수행 가능한 최대 문자 변경 횟수
26+ - 1 ≤ s.length ≤ 100,000
27+ - 0 ≤ k ≤ s.length
28+
29+ 출력:
30+ - 최대 k번의 문자 변경을 통해 만들 수 있는
31+ 모든 문자가 같은 가장 긴 연속 부분 문자열의 길이
32+
33+ 예시 1:
34+ 입력:
35+ s = "ABAB", k = 2
36+ 설명:
37+ 두 문자를 변경하여 "AAAA" 또는 "BBBB"로 만들 수 있다.
38+ 출력:
39+ 4
40+
41+ 예시 2:
42+ 입력:
43+ s = "AABABBA", k = 1
44+ 설명:
45+ 한 문자를 변경하여 연속된 "BBBB" 부분 문자열을 만들 수 있다.
46+ 출력:
47+ 4
48+
49+ 주의 사항:
50+ - 변경은 반드시 최대 k번까지만 가능하다.
51+ - 최종적으로 선택한 부분 문자열은
52+ 모든 문자가 동일해야 한다.
53+ */
54+
55+ var characterReplacement = function ( s , k ) {
56+ let left = 0 ;
57+ let maxLen = 0 ;
58+ let count = { } ;
59+ let maxCount = 0 ;
60+
61+ for ( let right = 0 ; right < s . length ; right ++ )
62+ {
63+ const char = s [ right ] ;
64+ count [ char ] = ( count [ char ] || 0 ) + 1 ;
65+
66+ maxCount = Math . max ( maxCount , count [ char ] ) ;
67+
68+ while ( ( right - left + 1 ) - maxCount > k ) {
69+ count [ s [ left ] ] -- ;
70+ left ++ ;
71+ }
72+
73+ maxLen = Math . max ( maxLen , right - left + 1 ) ;
74+ }
75+
76+ return maxLen ;
77+ } ;
78+
79+ console . log ( characterReplacement ( "ABAB" , 2 ) )
80+ console . log ( characterReplacement ( "AABABBA" , 1 ) )
81+
You can’t perform that action at this time.
0 commit comments