Skip to content

Commit 3a89057

Browse files
committed
feat: add solutions to lc problem: No.1405
1 parent 280a6ba commit 3a89057

File tree

4 files changed

+195
-0
lines changed

4 files changed

+195
-0
lines changed

solution/1400-1499/1405.Longest Happy String/README.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,4 +287,76 @@ function longestDiverseString(a: number, b: number, c: number): string {
287287

288288
<!-- solution:end -->
289289

290+
<!-- solution:start -->
291+
292+
### Solution 2: Greedy + Priority Queue
293+
294+
<!-- tabs:start -->
295+
296+
#### TypeScript
297+
298+
```ts
299+
function longestDiverseString(a: number, b: number, c: number): string {
300+
let res = '';
301+
let prev = { ch: '', c: 0 };
302+
let last = { ch: '', c: 0 };
303+
const pq = new MaxPriorityQueue({ priority: ({ c }) => c });
304+
305+
pq.enqueue({ ch: 'a', c: a });
306+
pq.enqueue({ ch: 'b', c: b });
307+
pq.enqueue({ ch: 'c', c });
308+
309+
while (pq.size()) {
310+
const item = pq.dequeue().element;
311+
let c = item.c < prev.c ? 1 : 2;
312+
313+
if (prev.c) pq.enqueue(prev);
314+
if (last.ch !== item.ch && item.c) last = { ...item, c: 0 };
315+
316+
while (c-- && item.c && last.c++ < 2) {
317+
item.c--;
318+
res += item.ch;
319+
}
320+
prev = item;
321+
}
322+
323+
return res;
324+
}
325+
```
326+
327+
#### JavaScript
328+
329+
```js
330+
function longestDiverseString(a, b, c) {
331+
let res = '';
332+
let prev = { ch: '', c: 0 };
333+
let last = { ch: '', c: 0 };
334+
const pq = new MaxPriorityQueue({ priority: ({ c }) => c });
335+
336+
pq.enqueue({ ch: 'a', c: a });
337+
pq.enqueue({ ch: 'b', c: b });
338+
pq.enqueue({ ch: 'c', c });
339+
340+
while (pq.size()) {
341+
const item = pq.dequeue().element;
342+
let c = item.c < prev.c ? 1 : 2;
343+
344+
if (prev.c) pq.enqueue(prev);
345+
if (last.ch !== item.ch && item.c) last = { ...item, c: 0 };
346+
347+
while (c-- && item.c && last.c++ < 2) {
348+
item.c--;
349+
res += item.ch;
350+
}
351+
prev = item;
352+
}
353+
354+
return res;
355+
}
356+
```
357+
358+
<!-- tabs:end -->
359+
360+
<!-- solution:end -->
361+
290362
<!-- problem:end -->

solution/1400-1499/1405.Longest Happy String/README_EN.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,77 @@ function longestDiverseString(a: number, b: number, c: number): string {
279279
return ans.join('');
280280
}
281281
```
282+
<!-- tabs:end -->
283+
284+
<!-- solution:end -->
285+
286+
<!-- solution:start -->
287+
288+
### Solution 2: Greedy + Priority Queue
289+
290+
<!-- tabs:start -->
291+
292+
#### TypeScript
293+
294+
```ts
295+
function longestDiverseString(a: number, b: number, c: number): string {
296+
let res = '';
297+
let prev = { ch: '', c: 0 };
298+
let last = { ch: '', c: 0 };
299+
const pq = new MaxPriorityQueue({ priority: ({ c }) => c });
300+
301+
pq.enqueue({ ch: 'a', c: a });
302+
pq.enqueue({ ch: 'b', c: b });
303+
pq.enqueue({ ch: 'c', c });
304+
305+
while (pq.size()) {
306+
const item = pq.dequeue().element;
307+
let c = item.c < prev.c ? 1 : 2;
308+
309+
if (prev.c) pq.enqueue(prev);
310+
if (last.ch !== item.ch && item.c) last = { ...item, c: 0 };
311+
312+
while (c-- && item.c && last.c++ < 2) {
313+
item.c--;
314+
res += item.ch;
315+
}
316+
prev = item;
317+
}
318+
319+
return res;
320+
}
321+
```
322+
323+
#### JavaScript
324+
325+
```js
326+
function longestDiverseString(a, b, c) {
327+
let res = '';
328+
let prev = { ch: '', c: 0 };
329+
let last = { ch: '', c: 0 };
330+
const pq = new MaxPriorityQueue({ priority: ({ c }) => c });
331+
332+
pq.enqueue({ ch: 'a', c: a });
333+
pq.enqueue({ ch: 'b', c: b });
334+
pq.enqueue({ ch: 'c', c });
335+
336+
while (pq.size()) {
337+
const item = pq.dequeue().element;
338+
let c = item.c < prev.c ? 1 : 2;
339+
340+
if (prev.c) pq.enqueue(prev);
341+
if (last.ch !== item.ch && item.c) last = { ...item, c: 0 };
342+
343+
while (c-- && item.c && last.c++ < 2) {
344+
item.c--;
345+
res += item.ch;
346+
}
347+
prev = item;
348+
}
349+
350+
return res;
351+
}
352+
```
282353

283354
<!-- tabs:end -->
284355

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
function longestDiverseString(a, b, c) {
2+
let res = '';
3+
let prev = { ch: '', c: 0 };
4+
let last = { ch: '', c: 0 };
5+
const pq = new MaxPriorityQueue({ priority: ({ c }) => c });
6+
7+
pq.enqueue({ ch: 'a', c: a });
8+
pq.enqueue({ ch: 'b', c: b });
9+
pq.enqueue({ ch: 'c', c });
10+
11+
while (pq.size()) {
12+
const item = pq.dequeue().element;
13+
let c = item.c < prev.c ? 1 : 2;
14+
15+
if (prev.c) pq.enqueue(prev);
16+
if (last.ch !== item.ch && item.c) last = { ...item, c: 0 };
17+
18+
while (c-- && item.c && last.c++ < 2) {
19+
item.c--;
20+
res += item.ch;
21+
}
22+
prev = item;
23+
}
24+
25+
return res;
26+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
function longestDiverseString(a: number, b: number, c: number): string {
2+
let res = '';
3+
let prev = { ch: '', c: 0 };
4+
let last = { ch: '', c: 0 };
5+
const pq = new MaxPriorityQueue({ priority: ({ c }) => c });
6+
7+
pq.enqueue({ ch: 'a', c: a });
8+
pq.enqueue({ ch: 'b', c: b });
9+
pq.enqueue({ ch: 'c', c });
10+
11+
while (pq.size()) {
12+
const item = pq.dequeue().element;
13+
let c = item.c < prev.c ? 1 : 2;
14+
15+
if (prev.c) pq.enqueue(prev);
16+
if (last.ch !== item.ch && item.c) last = { ...item, c: 0 };
17+
18+
while (c-- && item.c && last.c++ < 2) {
19+
item.c--;
20+
res += item.ch;
21+
}
22+
prev = item;
23+
}
24+
25+
return res;
26+
}

0 commit comments

Comments
 (0)