File tree Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Original file line number Diff line number Diff line change
1
+ #define TO_INDEX (c ) c - 'a'
2
+
3
+ bool isEquals (int * a , int * b , int n ) {
4
+ for (int i = 0 ; i < n ; i ++ ) {
5
+ if (a [i ] != b [i ]) {
6
+ return false;
7
+ }
8
+ }
9
+ return true;
10
+ }
11
+
12
+ /**
13
+ * Note: The returned array must be malloced, assume caller calls free().
14
+ */
15
+ int * findAnagrams (char * s , char * p , int * returnSize ) {
16
+ int sSize = strlen (s );
17
+ int pSize = strlen (p );
18
+ int pFreq [26 ] = {0 };
19
+ int sFreq [26 ] = {0 };
20
+ int i , count ;
21
+ int * ans ;
22
+
23
+ if (sSize < pSize ) {
24
+ * returnSize = 0 ;
25
+ return ans ;
26
+ }
27
+
28
+ for (i = 0 ; i < pSize ; i ++ ) {
29
+ pFreq [TO_INDEX (p [i ])]++ ;
30
+ sFreq [TO_INDEX (s [i ])]++ ;
31
+ }
32
+
33
+ count = 0 ;
34
+ ans = (int * )calloc (sSize - pSize + 1 , sizeof (int ));
35
+ for (i = 0 ; i <= sSize - pSize ; i ++ ) {
36
+ if (i > 0 ) {
37
+ sFreq [TO_INDEX (s [i - 1 ])]-- ;
38
+ sFreq [TO_INDEX (s [i + pSize - 1 ])]++ ;
39
+ }
40
+ if (isEquals (sFreq , pFreq , 26 )) {
41
+ ans [count ++ ] = i ;
42
+ }
43
+ }
44
+ * returnSize = count ;
45
+
46
+ return ans ;
47
+ }
You can’t perform that action at this time.
0 commit comments