@@ -187,6 +187,83 @@ function minimumPushes(word: string): number {
187
187
}
188
188
```
189
189
190
+ #### JavaScript
191
+
192
+ ``` js
193
+ function minimumPushes (word ) {
194
+ const cnt = Array (26 ).fill (0 );
195
+ for (const c of word) {
196
+ ++ cnt[c .charCodeAt (0 ) - ' a' .charCodeAt (0 )];
197
+ }
198
+ cnt .sort ((a , b ) => b - a);
199
+ let ans = 0 ;
200
+ for (let i = 0 ; i < 26 ; ++ i) {
201
+ ans += (((i / 8 ) | 0 ) + 1 ) * cnt[i];
202
+ }
203
+ return ans;
204
+ }
205
+ ```
206
+
207
+ <!-- tabs: end -->
208
+
209
+ <!-- solution: end -->
210
+
211
+ <!-- solution: start -->
212
+
213
+ ### Solution 2: Priority Queue
214
+
215
+ <!-- tabs: start -->
216
+
217
+ #### TypeScript
218
+
219
+ ``` ts
220
+ function minimumPushes(word : string ): number {
221
+ const pq = new MaxPriorityQueue ();
222
+ const cnt = new Map <string , number >();
223
+ let [i, res] = [0 , 0 ];
224
+
225
+ for (const x of word ) {
226
+ cnt .set (x , (cnt .get (x ) ?? 0 ) + 1 );
227
+ }
228
+
229
+ for (const [x, c] of cnt ) {
230
+ pq .enqueue (x , c );
231
+ }
232
+
233
+ while (! pq .isEmpty ()) {
234
+ const c = pq .dequeue ().priority ;
235
+ res += c * (((i ++ / 8 ) | 0 ) + 1 );
236
+ }
237
+
238
+ return res ;
239
+ }
240
+ ```
241
+
242
+ #### JavaScript
243
+
244
+ ``` js
245
+ function minimumPushes (word ) {
246
+ const pq = new MaxPriorityQueue ();
247
+ const cnt = new Map ();
248
+ let [i, res] = [0 , 0 ];
249
+
250
+ for (const x of word) {
251
+ cnt .set (x, (cnt .get (x) ?? 0 ) + 1 );
252
+ }
253
+
254
+ for (const [x , c ] of cnt) {
255
+ pq .enqueue (x, c);
256
+ }
257
+
258
+ while (! pq .isEmpty ()) {
259
+ const c = pq .dequeue ().priority ;
260
+ res += c * (((i++ / 8 ) | 0 ) + 1 );
261
+ }
262
+
263
+ return res;
264
+ }
265
+ ` ` `
266
+
190
267
<!-- tabs:end -->
191
268
192
269
<!-- solution:end -->
0 commit comments