Skip to content

Commit a7f282d

Browse files
committed
Find all anagrams in a string
1 parent 8d15fa2 commit a7f282d

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package leetcode.medium;
2+
3+
import java.util.Arrays;
4+
import java.util.List;
5+
6+
public class FindAllAnagramsInAString {
7+
8+
List<Integer> findAnagrams(String s, String p) {
9+
10+
int[] pCount = new int[26];
11+
int[] sCount = new int[26];
12+
List<Integer> result = new java.util.ArrayList<>();
13+
14+
// Count frequency of characters in p
15+
for (char c : p.toCharArray()) {
16+
pCount[c - 'a']++;
17+
}
18+
19+
// Sliding window to count frequency of characters in s
20+
for (int i = 0; i < s.length(); i++) {
21+
sCount[s.charAt(i) - 'a']++;
22+
23+
// Remove the character that is out of the window
24+
if (i >= p.length()) {
25+
sCount[s.charAt(i - p.length()) - 'a']--;
26+
}
27+
28+
// Compare counts
29+
if (Arrays.equals(pCount, sCount)) {
30+
result.add(i - p.length() + 1);
31+
}
32+
}
33+
34+
return result;
35+
}
36+
37+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package leetcode.medium;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.util.List;
6+
7+
import static org.junit.jupiter.api.Assertions.*;
8+
9+
class FindAllAnagramsInAStringTest {
10+
11+
private final FindAllAnagramsInAString findAllAnagramsInAString;
12+
13+
FindAllAnagramsInAStringTest() {
14+
findAllAnagramsInAString = new FindAllAnagramsInAString();
15+
}
16+
17+
@Test
18+
void testFindAnagrams1() {
19+
String s = "cbaebabacd";
20+
String p = "abc";
21+
assertEquals(List.of(0, 6), findAllAnagramsInAString.findAnagrams(s, p));
22+
}
23+
24+
@Test
25+
void testFindAnagrams2() {
26+
String s = "abab";
27+
String p = "ab";
28+
assertEquals(List.of(0, 1, 2), findAllAnagramsInAString.findAnagrams(s, p));
29+
}
30+
31+
@Test
32+
void testFindAnagrams3() {
33+
String s = "aaaaaaaaaa";
34+
String p = "a";
35+
assertEquals(List.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), findAllAnagramsInAString.findAnagrams(s, p));
36+
}
37+
38+
@Test
39+
void testFindAnagrams4() {
40+
String s = "abababab";
41+
String p = "ab";
42+
assertEquals(List.of(0, 1, 2, 3, 4, 5, 6), findAllAnagramsInAString.findAnagrams(s, p));
43+
}
44+
}

0 commit comments

Comments
 (0)