Skip to content

Commit f657baf

Browse files
committed
add: solve #244 Longest Repeating Character Replacement with ts
1 parent a91dd42 commit f657baf

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
* sliding window
3+
* ๋ฌธ์ž์—ด k๋ฒˆ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ, ๊ฐ€์žฅ ๊ธด ๋ฐ˜๋ณต ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ๊ตฌํ•˜๊ธฐ.
4+
* @param {string} s - ๋ฌธ์ž์—ด
5+
* @param {number} k - ๋ฌธ์ž ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ํšŸ์ˆ˜
6+
* @return {number} - ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
7+
*
8+
* ์‹œ๊ฐ„ ๋ณต์ ‘๋„: O(n)
9+
* - ๋ฌธ์ž๊ธธ์ด ๋งŒํผ์˜ 1ํšŒ ์ˆœํšŒ
10+
*
11+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
12+
* - ์•ŒํŒŒ๋ฒณ 26๊ฐœ์˜ ์ œํ•œ๋œ Map ์‚ฌ์šฉ
13+
*
14+
*/
15+
function characterReplacement(s: string, k: number): number {
16+
// ๋ฌธ์ž์˜ ๋นˆ๋„๋ฅผ ์ €์žฅํ•  Map
17+
const charFreq = new Map<string, number>();
18+
19+
// window ์™ผ์ชฝ ํฌ์ธํ„ฐ
20+
let left = 0;
21+
22+
// ์ตœ๋Œ€ ๊ธธ์ด, ์ตœ๋Œ€ ๋นˆ๋„ ์ดˆ๊ธฐํ™”
23+
let maxLength = 0;
24+
let maxFreq = 0;
25+
26+
// ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋ฅผ 0๋ถ€ํ„ฐ ์ด๋™ํ•˜๋ฉฐ window ํฌ๊ธฐ ์กฐ์ ˆ
27+
for (let right = 0; right < s.length; right++) {
28+
const char = s[right];
29+
30+
// ํ˜„์žฌ ๋ฌธ์ž์˜ ๋นˆ๋„ ์ฆ๊ฐ€
31+
charFreq.set(char, (charFreq.get(char) || 0) + 1);
32+
33+
// ์œˆ๋„์šฐ ๋‚ด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ ๋ฌธ์ž์˜ ๋นˆ๋„ ๊ฐฑ์‹ 
34+
maxFreq = Math.max(maxFreq, charFreq.get(char)!);
35+
36+
// ์กฐ๊ฑด: (์œˆ๋„์šฐ ํฌ๊ธฐ - maxFreq > k)์ผ ๋•Œ, ์™ผ์ชฝ ํฌ์ธํ„ฐ ์ด๋™
37+
if (right - left + 1 - maxFreq > k) {
38+
const leftChar = s[left];
39+
charFreq.set(leftChar, charFreq.get(leftChar)! - 1); // ์™ผ์ชฝ ๋ฌธ์ž ์ œ๊ฑฐ
40+
left++; // ์œˆ๋„์šฐ ์ถ•์†Œ
41+
}
42+
43+
// ํ˜„์žฌ ์œˆ๋„์šฐ ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ตœ๋Œ€ ๊ธธ์ด ๊ฐฑ์‹ 
44+
maxLength = Math.max(maxLength, right - left + 1);
45+
}
46+
47+
return maxLength;
48+
49+
}
50+

0 commit comments

Comments
ย (0)