Skip to content

Commit 0f5b3d3

Browse files
committed
8주차 문제 풀이
1 parent f9829f0 commit 0f5b3d3

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
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+

0 commit comments

Comments
 (0)