Valid Parethesis

https://leetcode.com/problems/valid-parenthesis-string/

维护两个值cmin,cmax

cmin代表最少需要的"(" 来维持valid的状态

cmax代表做多可以用到的"("

这里需要注意的是cmin = max(cmin-1,0)

因为当当前char 是 ”)“的时候,如果你的cmin已经是负了而你的cmax还是正数(因为这里 cmax < 0 没有return False)说明其实你是使用了太多”*“ 去做 "(" 这时候所有")" 都已经被pair完了,你的原来本身的"("都得是负数才能valid,那么这时候你就应该让之前的"*" 变成empty string

class Solution:
    def checkValidString(self, s: str) -> bool:
        cmin = 0
        cmax = 0
        for i in s:
            if i == "(":
                cmax+=1
                cmin+=1
            elif i == ")":
                cmax-=1
                cmin = max(cmin-1,0)
            elif i == "*":
                cmax+=1
                cmin = max(cmin-1,0)
            if cmax < 0:
                return False
        return cmin == 0

Last updated

Was this helpful?