【Leetcode】678. Valid Parenthesis String

class Solution(object):

    def checkValidString(self, s):

        """

        :type s: str

        :rtype: bool

        """

        cnt = 0

        for s1 in s:

            if s1=='(' or s1=='*':

                cnt += 1

            if s1==')':

                cnt -= 1

            if cnt<0:

                return False

        if cnt==0:

            return True

        cnt = 0

        for s1 in s[::-1]:

            if s1==')' or s1=='*':

                cnt += 1

            if s1=='(':

                cnt -= 1

            if cnt<0:

                return False

        return True

1 因为*可以当做(,也可以当做),那我们就分两种情况判断,先把*当做(判断,然后再判断*为)的情况

2 同时使用一个计数的变量,遇到(  就加,遇到 )就减

3 第一种情况:当cnt为负的时候就返回False

4 第二种情况:首先需要将string reverse一下,这样才是pair的概念,遇到一个),cnt加1,遇到(,就减1,代表消除一对

5 如果两种情况都满足要求的话,就返回True

6 第一种情况下,当最终cnt为0时,我们可以直接返回True。当cnt为正数的时候,我们不能返回False,因为有可能多余的(是*变来的,*可以表示为空

7 第二种情况下,如果最终cnt为0,返回True,如果cnt为正,说明有多余),这又分成两种情况,一种是*变成)导致多余的,另一种是)多余。在第一种情况的时候,如果是左括号多了,会在这种情况下检测出来,如果没有检测出来,说明就是星号变成的左括号。这些星号在第二种情况下又变成了右括号

8 在做反向遍历的时候,cnt要重新置0

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 哈喽,各位亲爱的战友,大家晚上好。我是今晚开你的主持人第七片雪,按照国际惯例先简单的做一下自我介绍。我是一个爱阅读...
    墨吟书阅读 1,718评论 4 5
  • 最近银行利息都跌成狗了,余额宝上年化利率也才2.5%,少得可怜,但是想要投资p2p,又担心这担心那的,看现在的情形...
    奔跑的阿贡阅读 208评论 0 0
  • 是胖猫 粘人的胖猫 Soft kitty warm kitty little ball of fur happy ...
    橘猫饭阅读 452评论 0 0

友情链接更多精彩内容