Python program to check matching of simple parentheses

后端 未结 25 2336
谎友^
谎友^ 2020-12-01 17:02

I am a Python newbie and I came across this exercise of checking whether or not the simple brackets \"(\", \")\" in a given string are matched evenly.

I have seen ex

相关标签:
25条回答
  • 2020-12-01 17:24

    You can do this in a couple of lines using accumulate (from itertools). The idea is to compute a cumulative parenthesis level going through the string with opening parentheses counting as level+1 and closing parentheses counting as level-1. If, at any point, the accumulated level falls below zero then there is an extra closing parenthesis. If the final level is not zero, then there is a missing closing parenthesis:

    from itertools import accumulate
    def matched(s):
        levels = list(accumulate((c=="(")-(c==")") for c in s))
        return all( level >= 0 for level in levels) and levels[-1] == 0
    
    0 讨论(0)
  • 2020-12-01 17:26
    def parenthesis_check(parenthesis):
        chars = []
        matches = {')':'(',']':'[','}':'{'}
        for i in parenthesis:
            if i in matches:
                if chars.pop() != matches[i]:
                    return False
            else:
                chars.append(i)
        return chars == []        
    
    0 讨论(0)
  • 2020-12-01 17:27

    here's another way to solve it by having a counter that tracks how many open parentheses that are difference at this very moment. this should take care all of the cases.

    def matched(str):
        diffCounter = 0
        length = len(str)
        for i in range(length):
            if str[i] == '(':
                diffCounter += 1
            elif str[i] == ')':
                diffCounter -= 1
        if diffCounter == 0:
            return True
        else:
            return False
    
    0 讨论(0)
  • 2020-12-01 17:27
    foo1="()()())("  
    
    def bracket(foo1):
        count = 0
        for i in foo1:
            if i == "(":
               count += 1
            else:
               if count==0 and i ==")":
                   return False
               count -= 1
    
       if count == 0:
           return True
       else:
           return False
    
    bracket(foo1)
    
    0 讨论(0)
  • 2020-12-01 17:29

    A very slightly more elegant way to do this is below. It cleans up the for loop and replaces the lists with a simple counter variable. It also returns false if the counter drops below zero so that matched(")(") will return False.

    def matched(str):
        count = 0
        for i in str:
            if i == "(":
                count += 1
            elif i == ")":
                count -= 1
            if count < 0:
                return False
        return count == 0
    
    0 讨论(0)
  • 2020-12-01 17:32

    this code works fine

    def matched(s):
      p_list=[]
      for i in range(0,len(s)):
        if s[i] =='(':
          p_list.append('(')
        elif s[i] ==')' :
          if not p_list:
            return False
          else:
            p_list.pop()
      if not p_list:
        return True
      else:
        return False
    
    0 讨论(0)
提交回复
热议问题