Skip to content

Commit b23860a

Browse files
authored
feat: add solutions to lc problem: No.1405 (#3645)
1 parent 280a6ba commit b23860a

File tree

4 files changed

+196
-0
lines changed

4 files changed

+196
-0
lines changed

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

+72
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+
### 方法二:贪心 + 优先队列(另一种写法)
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

+72
Original file line numberDiff line numberDiff line change
@@ -284,4 +284,76 @@ function longestDiverseString(a: number, b: number, c: number): string {
284284

285285
<!-- solution:end -->
286286

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