最长字串 限制重复长度

 

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
'''

  

  

posted @ 2019-07-08 16:45  papering  阅读(273)  评论(0编辑  收藏  举报