re.error: missing ), unterminated subpattern at position 0解决方法

问题描述

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

来源:力扣(LeetCode)

问题代码:

class Solution:
    # 定义check函数
    def match(str1, str2):
        if str1 == '(' and str2 == ')':
            return True
        if str1 == '[' and str2 == ']':
            return True
        if str1 == '{' and str2 == '}':
            return True
        else:
            return False

    def isValid(self, s: str) -> bool:
        # 题解
        slist = list(s)
        stack = []
        stack.append(slist[0])

        for i in range(1, len(slist)):
            if len(stack) == 0:
                stack.append(slist[i]) 
                continue
            
            str1 = stack[-1]
            str2 = slist[i]
            token = match(str1, str2)
            if token:
                stack.pop()
            else:
                stack.append(slist[i])

        if len(stack) == 0:
            return True
        else:
            return False

产生原因与解决方法

在调用match函数时,即语句token = match(str1, str2)发生错误,百度错误原因,大多数是括号不匹配或者全角半角的问题,但是这里显然不是以上原因,观察力扣官方题解,类中的方法都是写在给定方法之下的方法,所以将match函数换位置,问题解决。

完整代码

class Solution:
    def isValid(self, s: str) -> bool:
        # 定义check函数
        def match(str1, str2):
            if str1 == '(' and str2 == ')':
                return True
            if str1 == '[' and str2 == ']':
                return True
            if str1 == '{' and str2 == '}':
                return True
            else:
                return False

        # 题解
        slist = list(s)
        stack = []
        stack.append(slist[0])

        for i in range(1, len(slist)):
            if len(stack) == 0:
                stack.append(slist[i]) 
                continue
            
            str1 = stack[-1]
            str2 = slist[i]
            token = match(str1, str2)
            if token:
                stack.pop()
            else:
                stack.append(slist[i])

        if len(stack) == 0:
            return True
        else:
            return False

你可能感兴趣的:(bug,python,栈)