zoukankan      html  css  js  c++  java
  • 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))
    
  • 相关阅读:
    字符编码笔记:ASCII,Unicode和UTF8(转)
    如何让vs2005的网站编译成一个DLL
    全力奔跑
    工作心得之再谈“表现”
    IT外企那点事[转载]
    直面奋斗
    C#图片水印代码整理
    常用js代码
    一个很有趣的程序员等级考试题求循环小数
    String.Format(字符串输出格式)
  • 原文地址:https://www.cnblogs.com/wdt1/p/14172230.html
Copyright © 2011-2022 走看看