Skip to content

Commit da809c9

Browse files
committed
Longest Repeating Character Replacement Solution
1 parent 9f9c916 commit da809c9

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+
* μ΅œλŒ€ k번 문자 λ³€κ²½ ν›„, κ°€μž₯ κΈ΄ λ™μΌλ¬Έμž λΆ€λΆ„λ¬Έμžμ—΄ μ°ΎκΈ°
3+
* λ¬Έμžμ—΄ s와 μ •μˆ˜ k, μ΅œλŒ€ kλ²ˆκΉŒμ§€ 문자λ₯Ό λ‹€λ₯Έ μ˜λ¬ΈλŒ€λ¬Έμžλ‘œ λ°”κΏ€ 수 있음
4+
* λ™μΌν•œ 문자둜 κ΅¬μ„±λœ κ°€μž₯ κΈ΄ λΆ€λΆ„λ¬Έμžμ—΄ 길이λ₯Ό 리턴해라
5+
*
6+
* μŠ¬λΌμ΄λ”© μœˆλ„μš° μ‚¬μš©(λ¬Έμžμ—΄μ„ ν•œλ²ˆλ§Œ 순회)
7+
* μœˆλ„μš° λ‚΄μ—μ„œ, κ°€μž₯ 많이 λ“±μž₯ν•˜λŠ” 문자λ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€ λ¬Έμžλ“€μ΄, k개 μ΄ν•˜μΌ λ•Œλ§Œ, μœ νš¨ν•œ λΆ€λΆ„ λ¬Έμžμ—΄μ΄λ‹€
8+
* 쑰건을 λ§Œμ‘±ν•˜μ§€ μ•ŠμœΌλ©΄ μœˆλ„μš°μ˜ μ™Όμͺ½ 포인터λ₯Ό 였λ₯Έμͺ½μœΌλ‘œ μ΄λ™ν•˜μ—¬ μœˆλ„μš° 크기λ₯Ό 쀄인닀
9+
*
10+
* μ‹œκ°„λ³΅μž‘λ„ O(n)
11+
* κ³΅κ°„λ³΅μž‘λ„ O(1) - 문자 λΉˆλ„μˆ˜ μ €μž₯λ°°μ—΄ ν¬κΈ°λŠ” 항상 26 κ³ μ •
12+
*/
13+
14+
/**
15+
* @param {string} s
16+
* @param {number} k
17+
* @return {number}
18+
*/
19+
var characterReplacement = function (s, k) {
20+
// 문자 λΉˆλ„μˆ˜λ₯Ό μ €μž₯ν•  λ°°μ—΄ (A-Z: 65-90) 0으둜 μ΄ˆκΈ°ν™”
21+
const charCount = new Array(26).fill(0);
22+
23+
let left = 0; // μœˆλ„μš° μ™Όμͺ½ 끝
24+
let maxCount = 0; // ν˜„μž¬ μœˆλ„μš°μ—μ„œ κ°€μž₯ 많이 λ“±μž₯ν•˜λŠ” 문자의 λΉˆλ„μˆ˜
25+
let maxLength = 0; // κ²°κ³Ό: κ°€μž₯ κΈ΄ λΆ€λΆ„ λ¬Έμžμ—΄ 길이
26+
27+
// μœˆλ„μš°μ˜ 였λ₯Έμͺ½ 끝 이동
28+
for (let right = 0; right < s.length; right++) {
29+
// ν˜„μž¬ 문자의 λΉˆλ„μˆ˜ 증가 (문자 μ½”λ“œλ₯Ό 인덱슀둜 λ³€ν™˜)
30+
const charIndex = s.charCodeAt(right) - 65;
31+
charCount[charIndex]++;
32+
33+
// ν˜„μž¬ μœˆλ„μš°μ—μ„œ κ°€μž₯ 많이 λ“±μž₯ν•˜λŠ” 문자의 λΉˆλ„μˆ˜ μ—…λ°μ΄νŠΈ
34+
maxCount = Math.max(maxCount, charCount[charIndex]);
35+
36+
// ν˜„μž¬ μœˆλ„μš°μ—μ„œ λ³€κ²½ν•΄μ•Ό ν•  문자 μˆ˜κ°€ kλ₯Ό μ΄ˆκ³Όν•˜λ©΄ μœˆλ„μš°μ˜ μ™Όμͺ½μ„ 이동
37+
// ν˜„μž¬ μœˆλ„μš°μ—μ„œ λ³€κ²½ν•΄μ•Ό ν•  문자 수: μœˆλ„μš° 크기 - κ°€μž₯ 많이 λ“±μž₯ν•˜λŠ” 문자의 λΉˆλ„μˆ˜
38+
// μœˆλ„μš° 크기: right - left + 1
39+
if (right - left + 1 - maxCount > k) {
40+
// μ™Όμͺ½ 문자의 λΉˆλ„μˆ˜ κ°μ†Œ
41+
const leftCharIndex = s.charCodeAt(left) - 65;
42+
charCount[leftCharIndex]--;
43+
left++;
44+
}
45+
46+
// ν˜„μž¬ μœˆλ„μš° 크기둜 μ΅œλŒ€ 길이 μ—…λ°μ΄νŠΈ
47+
maxLength = Math.max(maxLength, right - left + 1);
48+
}
49+
50+
return maxLength;
51+
};

0 commit comments

Comments
Β (0)