Skip to content

Commit 7f18137

Browse files
committed
longest-repeating-character-replacement solution
1 parent a46a3b1 commit 7f18137

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* @param {string} s
3+
* @param {number} k
4+
* @return {number}
5+
*/
6+
var characterReplacement = function(s, k) {
7+
let start = 0;
8+
let end = 0;
9+
let maxLength = 0;
10+
let maxCountOfChar = 0;
11+
12+
const charMap = new Map();
13+
charMap.set(s[end], 1);
14+
15+
while (end < s.length) {
16+
maxCountOfChar = Math.max(maxCountOfChar, charMap.get(s[end]));
17+
18+
const currLength = end - start + 1;
19+
20+
const countOfOthers = currLength - maxCountOfChar;
21+
22+
// ํ˜„์žฌ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜์˜ค๋Š” ๋ฌธ์ž์—ด์˜ ์ˆ˜๋ฅผ ๋บธ ๊ฐ’์ธ countOfOthers๊ฐ€
23+
// k๋ณด๋‹ค ์ž‘์œผ๋ฉด ํ˜„์žฌ ๋ฌธ์ž์—ด์—์„œ start๋ฒˆ ์งธ ๋ฌธ์ž์˜ ์ˆ˜๋ฅผ map์—์„œ ๊ฐ์†Œ์‹œํ‚ค๊ณ  star์˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
24+
if (countOfOthers > k) {
25+
const startCharCount = charMap.get(s[start]);
26+
charMap.set(s[start], startCharCount - 1);
27+
28+
start++;
29+
} else {
30+
// countOfOthers๊ฐ€ k๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์„ ๊ฒฝ์šฐ k๋ฒˆ ๋ฌธ์ž๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์œผ๋กœ ํ˜„์žฌ ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋กœ ํ†ต์ผ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์œผ๋กœ
31+
// ํ˜„์žฌ ๋ฌธ์ž์—ด์—์„œ end๋ฒˆ ์งธ ๋ฌธ์ž์˜ ์ˆ˜๋ฅผ map์—์„œ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
32+
// ์ดํ›„ end์˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
33+
end++;
34+
35+
const endCharCount = charMap.get(s[end]);
36+
37+
if (endCharCount) {
38+
charMap.set(s[end], endCharCount + 1);
39+
} else {
40+
charMap.set(s[end], 1);
41+
}
42+
}
43+
44+
maxLength = Math.max(maxLength, Math.min(maxCountOfChar + k, currLength));
45+
}
46+
47+
return maxLength;
48+
};
49+
50+
// ์‹œ๊ฐ„๋ณต์žก๋„ O(n) -> ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ๊ธฐ๋ฒ•์œผ๋กœ ์ตœ๋Œ€ 1๋ฒˆ ์ˆœํšŒํ•œ๋‹ค.
51+
// ๊ณต๊ฐ„๋ณต์žก๋„ O(1) -> map์˜ ํฌ๊ธฐ๋Š” ์•ŒํŒŒ๋ฒณ์˜ ๊ฐฏ์ˆ˜์ธ ์ตœ๋Œ€ 26๊ฐœ์ด๋‹ค.

0 commit comments

Comments
ย (0)