在Python中检查表达式O(1)空间O(N ^ 2)时间复杂度的圆括号
假设我们有一个字符串str,其中包含这些括号'(',')','{','}','['和']',我们必须检查括号是否平衡。可以说,当开括号和闭括号类型相同时,括号是平衡的。支架以正确的顺序关闭。
因此,如果输入类似于{([]]},则输出将为True。
为了解决这个问题,我们将遵循以下步骤-
cnt:=0
i:=0
j:=-1
定义一个功能solve()。这需要s,临时
cnt:=cnt-1
s:=来自s的新列表
如果j>-1并且s[j]与temp相同,则
j:=j-1
s[i]:='#'
s[j]:='#'
当j>=0且s[j]与'#'相同时,执行
我:=我+1>
返回1
除此以外,
返回0
从主要方法中,执行以下操作-
如果s的大小等于0,则
返回True
除此以外,
返回False
如果s[i]与'}'相同,则
j:=我
我:=我+1
cnt:=cnt+1
ans:=solve(s,'[')
如果ans与0相同,则
返回False
ans:=solve(s,'(')
如果ans与0相同,则
返回False
返回False
ans:=solve(s,'{')
如果ans与0相同,则
否则,当s[i]与')'相同时,则
否则,当s[i]与']'相同时,则
除此以外,
回答:=False
当我<的大小不为零时,
如果cnt不等于0,则
返回True
示例
让我们看下面的实现以更好地理解-
cnt = 0
i = 0
j = -1
def solve(s, temp):
   global i, j, cnt
   cnt -= 1
   s = list(s)
   if j > -1 and s[j] == temp:
      s[i] = '#'
      s[j] = '#'
      while j >= 0 and s[j] == '#':
         j -= 1
      i += 1
      return 1
   else:
      return 0
def bracketOrderCheck(s):
   global i, j, cnt
   if len(s) == 0:
      return True
   else:
      ans = False
      while i < len(s):
         if s[i] == '}':
            ans = solve(s, '{')
            if ans == 0:
               return False
         elif s[i] == ')':
            ans = solve(s, '(')
            if ans == 0:
               return False
         elif s[i] == ']':
            ans = solve(s, '[')
            if ans == 0:
               return False
         else:
            j = i
            i += 1
            cnt += 1
      if cnt != 0:
         return False
      return True
print(bracketOrderCheck("{([])}"))输入值
"{(()[])}"输出结果
True
