https://leetcode.com/problems/longest-happy-string 1405. Longest Happy String 一個字串 s 是 快樂的條件如下 s 只包含 'a', 'b', 'c' s 不包含 'aaa', 'bbb', 'ccc' s 分別最多只有 a, b, c 個 'a', 'b', 'c' 給3個數a,b,c 回傳最長的快樂字串 如果有多種可能 回傳其中一種 如果沒有 則回傳空字串 Example 1: Input: a = 1, b = 1, c = 7 Output: "ccaccbcc" Explanation: "ccbccacc" 也是一種正確答案 Example 2: Input: a = 7, b = 1, c = 0 Output: "aabaa" Explanation: 這是這題的唯一解 Constraints: 0 <= a, b, c <= 100 a + b + c > 0 思路: 每種字母最多連續2次 用一個字典記錄當下各個字母使用的次數 不過實際只會有 1,0,0 或 2,0,0 兩種 因為決定要加哪個字母後 另外兩個都會歸0 字母與剩餘次數則做成列表 每次進行排序 當最多的字母已使用2次 則換為第二多的 如果第二多的剩0次 則直接回傳答案 Python Code: class Solution: def longestDiverseString(self, a: int, b: int, c: int) -> str: ans = '' items = [[a, 'a'], [b, 'b'], [c, 'c']] counts = {'a': 0, 'b': 0, 'c': 0} for _ in range(a+b+c): items.sort(reverse=True) first, second, third = items if not ans: ans += first[1] first[0] -= 1 counts[first[1]] += 1 continue if counts[first[1]] == 2: if second[0] > 0: ans += second[1] second[0] -= 1 counts[second[1]] += 1 counts[first[1]] = 0 counts[third[1]] = 0 else: return ans else: ans += first[1] counts[first[1]] += 1 first[0] -= 1 counts[second[1]] = 0 counts[third[1]] = 0 return ans 好醜 :( 話說這個月又累計3次沒答題了 好耶 再一次就8888 -- ※ 發信站: 批踢踢實業坊(pttsite.org.tw), 來自: 220.129.74.94 (臺灣) ※ 文章網址: https://pttsite.org.tw/Marginalman/M.1729064147.A.2CB