基本資料#
難易度: medium 第一次嘗試:2025-07-22
- 提交紀錄:Accepted(一次通過)
解題思路#
不能出現 AAA 或 BBB:
AA後面不能接AA或AB(會變成AAA),只能接BB。BB後面不能接BB,可以接AA或AB。AB後面可以接AA或AB,不能接BB。
所以 AA 和 BB 一定要交替:AABBAABB...,最多用 min(x, y) 對;如果有一種比較多,可以在頭或尾再多放一個。AB 全部可以串在一起,接在 BB 後面、AA 前面(...BB ABAB AA...),所以全部都用得上。
x == y:(2x + z) × 2
x != y:(2 × min(x, y) + 1 + z) × 2
我的解法#
class Solution:
def longestString(self, x: int, y: int, z: int) -> int:
pairs = min(x, y)
pieces = 2 * pairs + (1 if x != y else 0) + z # 用了幾個字串
return pieces * 2 # 每個字串長度 2
LeetCode 的標籤是 DP(可以用 dp[x][y][z][上一個是什麼] 做),但找出規律之後是 O(1)。
複雜度#
時間 O(1),空間 O(1)。
要特別避免的錯誤#
- 以為
AB有限制:ABAB不會產生AAA或BBB,全部都能用。
面試口說整理#
AA 後面只能接 BB,所以 AA 和 BB 一定交替,最多用比較少的那種的兩倍,多的那種再多一個;AB 可以全部串在一起,放在 BB 和 AA 之間。算出用了幾個字串再乘 2。時間 O(1)。
