b_bd_完成括号匹配(记录左括号数)

给出一个括号序列s,允许你在s的开始和结尾处添加一定数量的左括号('[')或者右括号(']')使其变为一个合法的括号匹配序列。你能求出添加最少的括号之后的合法的括号匹配序列是什么吗?

思路:实时记录左括号的数量l,如果遇到右括号时,若左括号数量l为0,则证明需要在当前右括号前面增加一个左括号[

def solve(s):
    n,l,ans=len(s),0,''
    for i in range(n):
        t=''
        if s[i]=='[':
            l+=1
            t=s[i]
        else:
            if l: 
                l-=1
                t=']'
            else: 
                t='[]'
        ans+=t
    while l:
        ans+=']'
        l-=1
    return ans
s=input()
print(solve(s))

这是第一次写的代码,只过了60%,原因是

输入:[]]][]][[][]][[][][[][[[][][[][][][]][]
预期:[[[[]]][]][[][]][[][][[][[[][][[][][][]][]]]]]
实际:[][][][][][[][]]  [[][] [[] [ [[][][[][][][]][]] ] ]](我拆分了一些,确实是对的)

这个额外添加数虽然是7,但生成括号也是对的啊,原因在于:当遇到右括号,且手头没有左括号可以拿出时,这个额外添加的左括号需要加在字符串的最左边的(服了,这么死板)

def solve(s):
    n,l,ans=len(s),0,''
    for i in range(n):
        if s[i]=='[':
            l+=1
            ans+=s[i]
        else:
            if l: l,ans=l-1,ans+']'
            else: ans='['+ans+']'
    while l:
        l,ans=l-1,ans+']'
    return ans
s=input()
print(solve(s))
posted @ 2020-12-22 12:00  童年の波鞋  阅读(119)  评论(0编辑  收藏  举报