题解 | #合法的括号字符串#

合法的括号字符串

https://www.nowcoder.com/practice/eceb50e041ec40bd93240b8b3b62d221

')'后边的*不能匹配当前‘)’,'('前面的*不能匹配当前‘(’,因为是从前往后遍历,故已经存入的所有*都可以匹配')',最后如果有多出的'(',判断是否总有下标大于他的剩余*与他匹配即可
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#

# @param s string字符串 
# @return bool布尔型
#
class Solution:
    def isValidString(self , s: str) -> bool:
        # write code here
        stack = []
        lis = []
        for i in range(len(s)):
            if s[i] == '(':
                stack.append(i)
            if s[i] == '*':
                lis.append(i)
            if s[i] == ')':
                if len(stack) != 0:
                    stack.pop()
                else:
                    if len(lis) != 0:
                        lis.pop(0)
                    else:
                        return False
        if len(stack) == 0:
            return True
        if len(stack) > len(lis):
            return False
        for i in reversed(stack):
            for j in lis:
                if i < j:
                    lis.remove(j)
                    break
            else:
                return False
        return True
        
全部评论
最后一个for循环能解释一下吗?看不懂
点赞 回复 分享
发布于 2022-11-03 00:10 陕西
这块其实就是想要保证剩余的每个(都有比他下标大的*跟他匹配,应该有更简单的方法,我是倒着遍历(的列表,然后正着遍历*列表,找到最小的下标比他大的*去除,如果没有证明这个(无法匹配,返回False
点赞 回复 分享
发布于 2022-11-06 02:30 山西
最后的一个for循环能达到想要的效果吗
点赞 回复 分享
发布于 2023-02-02 15:47 湖北

相关推荐

如题如果提出了一个薪资,A不成功,会有可能被取消offer吗
爱打瞌睡的柯基:最想去你们公司 但是别家开的高一些,希望能申请高一点 不管结果如何都谢谢你
点赞 评论 收藏
分享
昨天 17:22
已编辑
西安交通大学 Java
华为 昇腾 ai软件开发 薪资20k x (14-16),职级13A,5%公积金,c/cpp
BLOOMING7:闭眼滴滴,华子给的又少又累
点赞 评论 收藏
分享
斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务