迷失的括号序列——牛客编程题

第一次刷牛客,之前都是刷leetcode
牛客不像leetcode返回错误原因,全程盲改,终于通过了。

1.迷失的括号序列返回Impossible的几个初始情况:
1)字符串序列长度size为奇数
2)左括号的个数cnt_l 超过字符串序列长度的一半。
2.如果不满足以上两个情况则开始补全缺失的括号,补全原则为能先补左括号就补,左括号余量l_res = size/2 - cnt_l
3.检验给出的括号序列是否是合法的:
思路一)用栈检验。如果左括号则入栈,右括号时如果栈内无元素则不合法,有元素则弹出栈顶元素。最后检验栈为空合法,否则不合法。
思路二)用数值检验。左括号加一,右括号减一。如果再遍历途中存在数值小于0的情况则不合法。在最后判断如果数值不等于0也不合法(不过由于本题前面限制了左括号的数目所以都是小于0造成的不合法)
4.最后返回答案。

贴上代码:

#
# 
# @param brackets string字符串 brackets
# @return string字符串
#
class Solution:
    def MissingBrackets(self , brackets ):
        # write code here
        if brackets == '':
            return ''
        brackets = list(brackets)
        cnt_l = 0
        size = len(brackets)
        for i in brackets:
            if i == '(':
                cnt_l +=1
        if cnt_l>(size/2) or size%2==1:
            return 'Impossible'
        l_res = size/2-cnt_l
        for i in range(len(brackets)):
            if brackets[i] == '?' and l_res>0:
                brackets[i] = '('
                l_res-=1
            elif brackets[i]=='?':
                brackets[i]=')'
        stack = 0
        for i in brackets:
            if i == '(':
                stack+=1
            if i == ')' :
                stack-=1
            if stack<0:
                return 'Impossible'
        if stack!=0: return 'Impossible'
        ans = ''
        for i in brackets:
            ans+=i
        return ans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值