1
+ // Runtime: 14 ms (Top 11.69%) | Memory: 42.5 MB (Top 40.28%)
2
+ class Solution {
3
+ public String reorganizeString (String s ) {
4
+ StringBuilder ans =new StringBuilder ("" );
5
+ char [] charArray =new char [s .length ()];
6
+ Map <Character ,Integer > hashMap =new HashMap <>();
7
+ Queue <CharOccurence > queue =new PriorityQueue <>((a ,b )->b .occurence -a .occurence );
8
+
9
+ charArray =s .toCharArray ();
10
+
11
+ for (int i =0 ;i <charArray .length ;i ++)
12
+ {
13
+ Integer occurence =hashMap .get (charArray [i ]);
14
+ if (occurence ==null )
15
+ hashMap .put (charArray [i ],1 );
16
+ else
17
+ hashMap .put (charArray [i ],occurence +1 );
18
+ }
19
+ queue .addAll (hashMap .entrySet ()
20
+ .stream ()
21
+ .parallel ()
22
+ .map (e ->new CharOccurence (e .getKey (),e .getValue ()))
23
+ .collect (Collectors .toList ()));
24
+ while (!queue .isEmpty ())
25
+ {
26
+ Queue <CharOccurence > tmpQueue =new LinkedList <>();
27
+ int sizeQueue =queue .size ();
28
+ int stringLength =ans .length ();
29
+ int startSub =(stringLength -1 <0 )?0 :stringLength -1 ;
30
+ int endSub =stringLength ;
31
+ String lastLetter =ans .substring (startSub ,endSub );
32
+ boolean letterAdded =false ;
33
+ for (int i =0 ;i <sizeQueue ;i ++)
34
+ {
35
+ CharOccurence letter =queue .poll ();
36
+ if (!lastLetter .contains (String .valueOf (letter .letter )))
37
+ {
38
+ letter .occurence --;
39
+ ans .append (String .valueOf (letter .letter ));
40
+ if (letter .occurence >0 )
41
+ tmpQueue .add (letter );
42
+ letterAdded =true ;
43
+ break ;
44
+ }
45
+ else
46
+ {
47
+ tmpQueue .add (letter );
48
+ }
49
+ }
50
+ if (!letterAdded )
51
+ return "" ;
52
+ queue .addAll (tmpQueue );
53
+ }
54
+ return ans .toString ();
55
+
56
+ }
57
+ class CharOccurence {
58
+ public Character letter ;
59
+ public int occurence ;
60
+ public CharOccurence (Character letter , int occurence )
61
+ {
62
+ this .letter =letter ;
63
+ this .occurence =occurence ;
64
+ }
65
+ }
66
+ }
0 commit comments