class Solution:
def leastInterval(self, tasks: List[str], n: int) -> int:
# 1. 假设任务间隔为n,最短完成任务时间就是任务总数
# 2.1 假设只有一种taskA,那么可以将A分成k组,每组间隔为n,那么执行时间为 (k-1)*(1+n) + 1. (最后一个任务A,不需要间隔了,所以是(k-1))
# 2.2 假设有多种任务A,B,且A和B的任务数相等(有m个A和m个B),那么执行时间为 (k-1)*(1+n) + m. m为任务数
# 2.3 假设有多重任务A,B,...,记最多任务数的任务为A B T,任务数目为k,那么执行时间为 (k-1) *(n-1) + p。p = len([A,B,T])
counter = collections.Counter(tasks)
# 记录具有最多任务数量的任务的 任务数量
maxn = max(counter.values())
max_tasks = len([v for v in counter.values() if v == maxn])
return max(len(tasks), (maxn - 1) * (1+n) + max_tasks)