Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

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

AltStyle によって変換されたページ (->オリジナル) /