From 3a89057600376b92328aa99f212c51da50293a1e Mon Sep 17 00:00:00 2001 From: rain84 Date: 2024年10月16日 22:33:24 +0300 Subject: [PATCH 1/3] feat: add solutions to lc problem: No.1405 --- .../1405.Longest Happy String/README.md | 72 +++++++++++++++++++ .../1405.Longest Happy String/README_EN.md | 71 ++++++++++++++++++ .../1405.Longest Happy String/Solution2.js | 26 +++++++ .../1405.Longest Happy String/Solution2.ts | 26 +++++++ 4 files changed, 195 insertions(+) create mode 100644 solution/1400-1499/1405.Longest Happy String/Solution2.js create mode 100644 solution/1400-1499/1405.Longest Happy String/Solution2.ts diff --git a/solution/1400-1499/1405.Longest Happy String/README.md b/solution/1400-1499/1405.Longest Happy String/README.md index 5f80fd4e3b5b3..65ccca0853797 100644 --- a/solution/1400-1499/1405.Longest Happy String/README.md +++ b/solution/1400-1499/1405.Longest Happy String/README.md @@ -287,4 +287,76 @@ function longestDiverseString(a: number, b: number, c: number): string { + + +### Solution 2: Greedy + Priority Queue + + + +#### TypeScript + +```ts +function longestDiverseString(a: number, b: number, c: number): string { + let res = ''; + let prev = { ch: '', c: 0 }; + let last = { ch: '', c: 0 }; + const pq = new MaxPriorityQueue({ priority: ({ c }) => c }); + + pq.enqueue({ ch: 'a', c: a }); + pq.enqueue({ ch: 'b', c: b }); + pq.enqueue({ ch: 'c', c }); + + while (pq.size()) { + const item = pq.dequeue().element; + let c = item.c < prev.c ? 1 : 2; + + if (prev.c) pq.enqueue(prev); + if (last.ch !== item.ch && item.c) last = { ...item, c: 0 }; + + while (c-- && item.c && last.c++ < 2) { + item.c--; + res += item.ch; + } + prev = item; + } + + return res; +} +``` + +#### JavaScript + +```js +function longestDiverseString(a, b, c) { + let res = ''; + let prev = { ch: '', c: 0 }; + let last = { ch: '', c: 0 }; + const pq = new MaxPriorityQueue({ priority: ({ c }) => c }); + + pq.enqueue({ ch: 'a', c: a }); + pq.enqueue({ ch: 'b', c: b }); + pq.enqueue({ ch: 'c', c }); + + while (pq.size()) { + const item = pq.dequeue().element; + let c = item.c < prev.c ? 1 : 2; + + if (prev.c) pq.enqueue(prev); + if (last.ch !== item.ch && item.c) last = { ...item, c: 0 }; + + while (c-- && item.c && last.c++ < 2) { + item.c--; + res += item.ch; + } + prev = item; + } + + return res; +} +``` + + + + + diff --git a/solution/1400-1499/1405.Longest Happy String/README_EN.md b/solution/1400-1499/1405.Longest Happy String/README_EN.md index bb953d2de5d13..f5a20e6912d93 100644 --- a/solution/1400-1499/1405.Longest Happy String/README_EN.md +++ b/solution/1400-1499/1405.Longest Happy String/README_EN.md @@ -279,6 +279,77 @@ function longestDiverseString(a: number, b: number, c: number): string { return ans.join(''); } ``` + + + + + + +### Solution 2: Greedy + Priority Queue + + + +#### TypeScript + +```ts +function longestDiverseString(a: number, b: number, c: number): string { + let res = ''; + let prev = { ch: '', c: 0 }; + let last = { ch: '', c: 0 }; + const pq = new MaxPriorityQueue({ priority: ({ c }) => c }); + + pq.enqueue({ ch: 'a', c: a }); + pq.enqueue({ ch: 'b', c: b }); + pq.enqueue({ ch: 'c', c }); + + while (pq.size()) { + const item = pq.dequeue().element; + let c = item.c < prev.c ? 1 : 2; + + if (prev.c) pq.enqueue(prev); + if (last.ch !== item.ch && item.c) last = { ...item, c: 0 }; + + while (c-- && item.c && last.c++ < 2) { + item.c--; + res += item.ch; + } + prev = item; + } + + return res; +} +``` + +#### JavaScript + +```js +function longestDiverseString(a, b, c) { + let res = ''; + let prev = { ch: '', c: 0 }; + let last = { ch: '', c: 0 }; + const pq = new MaxPriorityQueue({ priority: ({ c }) => c }); + + pq.enqueue({ ch: 'a', c: a }); + pq.enqueue({ ch: 'b', c: b }); + pq.enqueue({ ch: 'c', c }); + + while (pq.size()) { + const item = pq.dequeue().element; + let c = item.c < prev.c ? 1 : 2; + + if (prev.c) pq.enqueue(prev); + if (last.ch !== item.ch && item.c) last = { ...item, c: 0 }; + + while (c-- && item.c && last.c++ < 2) { + item.c--; + res += item.ch; + } + prev = item; + } + + return res; +} +``` diff --git a/solution/1400-1499/1405.Longest Happy String/Solution2.js b/solution/1400-1499/1405.Longest Happy String/Solution2.js new file mode 100644 index 0000000000000..d97eb4f18028f --- /dev/null +++ b/solution/1400-1499/1405.Longest Happy String/Solution2.js @@ -0,0 +1,26 @@ +function longestDiverseString(a, b, c) { + let res = ''; + let prev = { ch: '', c: 0 }; + let last = { ch: '', c: 0 }; + const pq = new MaxPriorityQueue({ priority: ({ c }) => c }); + + pq.enqueue({ ch: 'a', c: a }); + pq.enqueue({ ch: 'b', c: b }); + pq.enqueue({ ch: 'c', c }); + + while (pq.size()) { + const item = pq.dequeue().element; + let c = item.c < prev.c ? 1 : 2; + + if (prev.c) pq.enqueue(prev); + if (last.ch !== item.ch && item.c) last = { ...item, c: 0 }; + + while (c-- && item.c && last.c++ < 2) { + item.c--; + res += item.ch; + } + prev = item; + } + + return res; +} diff --git a/solution/1400-1499/1405.Longest Happy String/Solution2.ts b/solution/1400-1499/1405.Longest Happy String/Solution2.ts new file mode 100644 index 0000000000000..839194e68f3a8 --- /dev/null +++ b/solution/1400-1499/1405.Longest Happy String/Solution2.ts @@ -0,0 +1,26 @@ +function longestDiverseString(a: number, b: number, c: number): string { + let res = ''; + let prev = { ch: '', c: 0 }; + let last = { ch: '', c: 0 }; + const pq = new MaxPriorityQueue({ priority: ({ c }) => c }); + + pq.enqueue({ ch: 'a', c: a }); + pq.enqueue({ ch: 'b', c: b }); + pq.enqueue({ ch: 'c', c }); + + while (pq.size()) { + const item = pq.dequeue().element; + let c = item.c < prev.c ? 1 : 2; + + if (prev.c) pq.enqueue(prev); + if (last.ch !== item.ch && item.c) last = { ...item, c: 0 }; + + while (c-- && item.c && last.c++ < 2) { + item.c--; + res += item.ch; + } + prev = item; + } + + return res; +} From bfcf4eb459c526273be81c4e776734019f647dfc Mon Sep 17 00:00:00 2001 From: rain84 Date: 2024年10月16日 19:34:23 +0000 Subject: [PATCH 2/3] style: format code and docs with prettier --- solution/1400-1499/1405.Longest Happy String/README_EN.md | 1 + 1 file changed, 1 insertion(+) diff --git a/solution/1400-1499/1405.Longest Happy String/README_EN.md b/solution/1400-1499/1405.Longest Happy String/README_EN.md index f5a20e6912d93..343cbccf73f31 100644 --- a/solution/1400-1499/1405.Longest Happy String/README_EN.md +++ b/solution/1400-1499/1405.Longest Happy String/README_EN.md @@ -279,6 +279,7 @@ function longestDiverseString(a: number, b: number, c: number): string { return ans.join(''); } ``` + From a7f162c082afe690d319f1839af3ea57944b4063 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: 2024年10月17日 12:45:32 +0800 Subject: [PATCH 3/3] Update README.md --- solution/1400-1499/1405.Longest Happy String/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solution/1400-1499/1405.Longest Happy String/README.md b/solution/1400-1499/1405.Longest Happy String/README.md index 65ccca0853797..a13c50aa68f53 100644 --- a/solution/1400-1499/1405.Longest Happy String/README.md +++ b/solution/1400-1499/1405.Longest Happy String/README.md @@ -289,7 +289,7 @@ function longestDiverseString(a: number, b: number, c: number): string { -### Solution 2: Greedy + Priority Queue +### 方法二:贪心 + 优先队列(另一种写法)

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