Skip to content

Commit 0884062

Browse files
committed
Longest repeating character replacement
1 parent 1fb0d9c commit 0884062

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package leetcode.medium;
2+
3+
public class LongestRepeatingCharacterReplacement {
4+
5+
int characterReplacement(String s, int k) {
6+
7+
int[] freq = new int[26];
8+
int left = 0;
9+
int maxFreq = 0;
10+
int maxWindow = 0;
11+
12+
for (int right = 0; right < s.length(); right++) {
13+
14+
// Update the frequency of the current character
15+
freq[s.charAt(right) - 'A']++;
16+
17+
// Update the max frequency
18+
maxFreq = Math.max(maxFreq, freq[s.charAt(right) - 'A']);
19+
20+
int windowLength = right - left + 1;
21+
22+
// If the windowLength - max frequency > k,
23+
// then we need to shrink the window
24+
if (windowLength - maxFreq > k) {
25+
freq[s.charAt(left) - 'A']--;
26+
left++;
27+
}
28+
29+
windowLength = right - left + 1;
30+
maxWindow = Math.max(maxWindow, windowLength);
31+
}
32+
33+
return maxWindow;
34+
35+
}
36+
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package leetcode.medium;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import static org.junit.jupiter.api.Assertions.*;
6+
7+
class LongestRepeatingCharacterReplacementTest {
8+
9+
private final LongestRepeatingCharacterReplacement longestRepeatingCharacterReplacement;
10+
11+
LongestRepeatingCharacterReplacementTest() {
12+
longestRepeatingCharacterReplacement = new LongestRepeatingCharacterReplacement();
13+
}
14+
15+
@Test
16+
void testCharacterReplacement1() {
17+
assertEquals(4, longestRepeatingCharacterReplacement.characterReplacement("ABAB", 2));
18+
}
19+
20+
@Test
21+
void testCharacterReplacement2() {
22+
assertEquals(4, longestRepeatingCharacterReplacement.characterReplacement("AABABBA", 1));
23+
}
24+
25+
@Test
26+
void testCharacterReplacement3() {
27+
assertEquals(2, longestRepeatingCharacterReplacement.characterReplacement("AABABBA", 0));
28+
}
29+
30+
@Test
31+
void testCharacterReplacement4() {
32+
assertEquals(6, longestRepeatingCharacterReplacement.characterReplacement("AABABCCBCCB", 2));
33+
}
34+
}

0 commit comments

Comments
 (0)