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

合法的括号字符串

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循环能达到想要的效果吗
点赞 回复 分享
发布于 2023-02-02 15:47 湖北
这块其实就是想要保证剩余的每个(都有比他下标大的*跟他匹配,应该有更简单的方法,我是倒着遍历(的列表,然后正着遍历*列表,找到最小的下标比他大的*去除,如果没有证明这个(无法匹配,返回False
点赞 回复 分享
发布于 2022-11-06 02:30 山西
最后一个for循环能解释一下吗?看不懂
点赞 回复 分享
发布于 2022-11-03 00:10 陕西

相关推荐

我看到好多人都在说0offer好焦虑,结果一看是投了百度快手字节啥的。好像大家都是只想通过校招进大厂,对小公司是不考虑的吗😂可是能进大厂的难道不是只有少部分人吗,真心发问
梦想是成为七海千秋:沉默的大多数吧,喜欢晒的都是能引起共鸣的大厂,找小厂的人,别人也不认识你这个小厂,就自己偷偷找了实际上大多数人哪有什么机会能找到大厂
点赞 评论 收藏
分享
买蜜雪也用卷:我觉得应该没有哪个人敢说自己熟练使用git,代码分支一复杂还是得慢慢寻思一下的,不过基本的拉代码提交代码还有分支什么的是应该会
点赞 评论 收藏
分享
认真搞学习:28小登的建议,投算法岗不要写什么物理竞赛,互联网+,多写点项目,用什么算法做了什么。还有本科算法是不可能的开发你这个也没有项目啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务