最长字串 限制重复长度
A/B/C代表输入的字母a/b/c的个数,均为非负整数
不能连续出现三个相同的字母
求给出可以组成的字长字符串的一个示例
def solution(A, B, C): d = {} ret = '' d['a'], d['b'], d['c'] = A, B, C count0 = 0 while True: for k in d: if d[k] > 0: d[k] -= 1 ret += k else: count0 += 1 if count0 >= 2: break remain = None for k in d: if d[k] > 0: remain = k break if remain is None: return ret # abc ---> abac replaceTarget = 'abc'.replace(remain, '') targetNum = ret.count(replaceTarget) replaceCount = min(targetNum, d[remain]) ret = ret.replace(replaceTarget, replaceTarget[0] + remain + replaceTarget[1], replaceCount) d[remain] -= replaceCount if d[remain] < 1: return ret # abac ---> aabaac replaceTarget = remain # [1, 1, 12] 14 ccaccbcc 8 targetNum = ret.replace(remain + remain, '').count(replaceTarget) replaceCount = min(targetNum, d[remain]) ret = ret.replace(replaceTarget, replaceTarget + remain, replaceCount) d[remain] -= replaceCount # 0....n-1 remainCount = d[remain] if ret[0] != remain: if remainCount == 1: ret = remain + ret elif remainCount >= 2: ret = remain + remain + ret remainCount -= 2 if ret[-1] != remain: if remainCount == 1: ret += remain elif remainCount >= 2: ret += remain + remain return ret l = [[0, 1, 2], [2, 2, 2], [2, 3, 4], [2, 3, 5], [1, 3, 7], [12, 3, 0], [1, 3, 1], [1, 5, 1], [0, 0, 12], [1, 1, 12]] for i in l: A, B, C = i s = solution(A, B, C) print(i, sum(i), s, len(s)) ''' [0, 1, 2] 3 bcc 3 [2, 2, 2] 6 abcabc 6 [2, 3, 4] 9 abcabcbcc 9 [2, 3, 5] 10 acbcabcbcc 10 [1, 3, 7] 11 accbccbccbc 11 [12, 3, 0] 15 aabaabaa 8 [1, 3, 1] 5 abbcb 5 [1, 5, 1] 7 babbcbb 7 [0, 0, 12] 12 cc 2 [1, 1, 12] 14 ccaccbcc 8 '''