1405 最長快樂字串(貪心演算法)

2022-06-07 10:42:10 字數 1228 閱讀 5368

如果字串中不含有任何 'aaa','bbb' 或 'ccc' 這樣的字串作為子串,那麼該字串就是乙個「快樂字串」。給你三個整數 a,b ,c,請你返回 任意乙個 滿足下列全部條件的字串 s:s 是乙個盡可能長的快樂字串。s 中 最多 有a 個字母 'a'、b 個字母 'b'、c 個字母 'c' 。s 中只含有 'a'、'b' 、'c' 三種字母。如果不存在這樣的字串 s ,請返回乙個空字串 ""。

示例 1:

輸入:a = 1, b = 1, c = 7

輸出:"ccaccbcc"

解釋:"ccbccacc" 也是一種正確答案。

示例 2:

輸入:a = 2, b = 2, c = 1

輸出:"aabbc"

示例 3:

輸入:a = 7, b = 1, c = 0

輸出:"aabaa"

解釋:這是該測試用例的唯一正確答案。

思路:每次從a,b,c中個數最多的字母tmp,該tmp(比如a)能否放入結果res,分三種情況:

1、tmp能放入res,則放入(res倒數第1、第2個字母不同時為tmp)

2、tmp不能放入res,並且沒有其他字元可選(比如b、c個數為0),則結束

3、tmp不能放入res,選擇個數次多的元素放入(比如b,一定能放入)

class solution:

def longestdiversestring(self, a: int, b: int, c: int) -> str:

m =

re = ''

while true:

#re中每增加乙個元素,都要對剩下的a,b,c個數進行排序!!!

tmp = sorted([(k, v) for k, v in m.items()], key = lambda x:x[1], reverse = true)

print(re)

if len(re)>=2 and re[-1] == re[-2] and re[-1] == tmp[0][0]:

if m[tmp[1][0]] <=0:

break

re += tmp[1][0]

m[tmp[1][0]] -= 1

else:

if m[tmp[0][0]] <= 0:

break

re += tmp[0][0]

m[tmp[0][0]] -= 1

return re

1405 最長快樂字串

如果字串中不含有任何 aaa bbb 或 ccc 這樣的字串作為子串,那麼該字串就是乙個 快樂字串 給你三個整數 a,b c,請你返回 任意乙個 滿足下列全部條件的字串 s s 是乙個盡可能長的快樂字串。s 中 最多 有a 個字母 a b 個字母 b c 個字母 c s 中只含有 a b c 三種字...

LeetCode 1405 最長快樂字串

如果字串中不含有任何 aaa bbb 或 ccc 這樣的字串作為子串,那麼該字串就是乙個 快樂字串 給你三個整數 a,b c,請你返回 任意乙個 滿足下列全部條件的字串 s 輸入 a 1,b 1,c 7 輸出 ccaccbcc 解釋 ccbccacc 也是一種正確答案。輸入 a 2,b 2,c 1 ...

5195 最長快樂字串

如果字串中不含有任何 aaa bbb 或 ccc 這樣的字串作為子串,那麼該字串就是乙個 快樂字串 給你三個整數 a,b c,請你返回 任意乙個 滿足下列全部條件的字串 s s 是乙個盡可能長的快樂字串。s 中 最多 有a 個字母 a b 個字母 b c 個字母 c s 中只含有 a b c 三種字...