Skip to content

Commit 324ffa7

Browse files
committed
feat: 424. Longest Repeating Character Replacement
1 parent 92d8382 commit 324ffa7

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// Time complexity: O(n)
2+
// Space complexity: O(1)
3+
4+
/**
5+
* @param {string} s
6+
* @param {number} k
7+
* @return {number}
8+
*/
9+
var characterReplacement = function (s, k) {
10+
let i = 0;
11+
let j = 0;
12+
13+
const counter = new Map();
14+
counter.set(s[i], 1);
15+
16+
let answer = 1;
17+
18+
const getMaxCount = () => {
19+
let maxCount = 0;
20+
21+
for (const [key, value] of counter) {
22+
maxCount = Math.max(maxCount, value);
23+
}
24+
25+
return maxCount;
26+
};
27+
28+
while (true) {
29+
if (s.length - i <= answer) {
30+
break;
31+
}
32+
33+
const maxCount = getMaxCount();
34+
const totalCount = j - i + 1;
35+
36+
if (totalCount - maxCount <= k) {
37+
j++;
38+
counter.set(s[j], (counter.get(s[j]) || 0) + 1);
39+
answer = Math.max(totalCount, answer);
40+
continue;
41+
}
42+
43+
counter.set(s[i], counter.get(s[i]) - 1);
44+
if (counter.get(s[i]) === 0) {
45+
counter.delete(s[i]);
46+
}
47+
48+
i++;
49+
}
50+
51+
return answer;
52+
};

0 commit comments

Comments
 (0)