File tree 2 files changed +76
-0
lines changed
2 files changed +76
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public static List <Integer > findAnagrams (String s , String p ) {
3
+ List <Integer > indexes = new ArrayList <>();
4
+ Map <Character , Integer > pMap = new TreeMap <>();
5
+
6
+ for (char c : p .toCharArray ()) {
7
+ pMap .put (c , pMap .getOrDefault (c , 0 ) + 1 );
8
+ }
9
+
10
+ Map <Character , Integer > map = new TreeMap <>();
11
+
12
+ for (int i =0 ; i <p .length () && i <s .length (); i ++) {
13
+ map .put (s .charAt (i ), map .getOrDefault (s .charAt (i ), 0 ) + 1 );
14
+ }
15
+
16
+ int i = p .length ();
17
+ while (i < s .length ()) {
18
+ int ind = i - p .length ();
19
+ if (map .toString ().equals (pMap .toString ())) {
20
+ indexes .add (ind );
21
+ }
22
+
23
+ map .put (s .charAt (ind ), map .getOrDefault (s .charAt (ind ), 0 ) - 1 );
24
+ if (map .get (s .charAt (ind )) <= 0 ) {
25
+ map .remove (s .charAt (ind ));
26
+ }
27
+
28
+ map .put (s .charAt (i ), map .getOrDefault (s .charAt (i ), 0 ) + 1 );
29
+
30
+ i ++;
31
+ }
32
+
33
+ if (map .toString ().equals (pMap .toString ())) {
34
+ indexes .add (i -p .length ());
35
+ }
36
+
37
+ return indexes ;
38
+ }
39
+ }
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public static List <List <String >> groupStrings (String [] strings ) {
3
+ Map <String , List <String >> map = new HashMap <>();
4
+
5
+ for (String s : strings ) {
6
+ String key = getKey (s );
7
+
8
+ if (map .containsKey (key )) {
9
+ map .get (key ).add (s );
10
+ }
11
+ else {
12
+ List <String > list = new ArrayList <>();
13
+ list .add (s );
14
+ map .put (key , list );
15
+ }
16
+ }
17
+
18
+ List <List <String >> ans = new ArrayList <>();
19
+ for (List <String > list : map .values ()) {
20
+ ans .add (list );
21
+ }
22
+
23
+ return ans ;
24
+ }
25
+
26
+ private static String getKey (String s ) {
27
+ StringBuilder sb = new StringBuilder ("" );
28
+ for (int i =1 ; i <s .length (); i ++) {
29
+ int diff = s .charAt (i ) - s .charAt (i -1 );
30
+ diff = diff < 0 ? diff + 26 : diff ;
31
+
32
+ sb .append (diff );
33
+ }
34
+
35
+ return sb .toString ();
36
+ }
37
+ }
You can’t perform that action at this time.
0 commit comments