Python如何实现的括号匹配判断功能

  介绍

小编给大家分享一下Python如何实现的括号匹配判断功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

1。用一个栈【Python中可以用列表】就可以解决,时间和空间复杂度都是O (n)

#, - *安康;编码:utf8  - * -   #,符号表   SYMBOLS =,{& # 39;} & # 39;:, & # 39;{& # 39;, & # 39;] & # 39;:, & # 39;[& # 39;, & # 39;) & # 39;:, & # 39;(& # 39;, & # 39;祝辞& # 39;:,& # 39;& lt; & # 39;}   SYMBOLS_L, SYMBOLS_R =, SYMBOLS.values (),, SYMBOLS.keys ()   def 检查(s):=,arr  []   ,for  c  s:拷贝   if 才能;c  SYMBOLS_L:拷贝   ,,#,左符号入栈   ,,arr.append (c)   elif 才能;c  SYMBOLS_R:拷贝   ,,#,右符号要么出栈,要么匹配失败   ,,if  arr 以及arr[1],==,符号[c]:   ,,,arr.pop ()   ,,:   ,,,return 错误的   return 真正的   打印(检查(“3,*,{3,+ [(2,3),*,(4 + 5)]}“))   打印(检查(“3,*,{3 +,[4,安康;6}]“))

运行结果:


2。

 #, - *安康;编码:utf8  - * -
  #,存储左括号和右括号
  时间=open_brackets  & # 39; ([{& lt; & # 39;=close_brackets  & # 39;)]}祝辞& # 39;
  #,映射左右括号便于出栈判断
  brackets_map =,{& # 39;) & # 39;:, & # 39;(& # 39;, & # 39;] & # 39;:, & # 39;[& # 39;, & # 39;} & # 39;:, & # 39;{& # 39;, & # 39;祝辞& # 39;:,& # 39;& lt; & # 39;}
  #,对于每一行数据,进行如下判定若括号为左括号,加入栈,若括号为右括号,判断是否跟栈尾括号对应,
  #,若对应,弹出栈尾元素,若所有括号均正确闭合,则最后栈为空。
  rows =, (
  & # 39;([& lt; ^祝辞x[,]{一}]{/}{t} g<^祝辞)& lt; {x} b> {x} & lt; z ({%} w 在[b] [c [c]] {& lt; h> {h}} & # 39;,
  (/),& # 39;{((x) {{*} *} w w) {f} {v} [% (^ [z]{你}{,})([[,]——]h)) {c} (*) [y]} & # 39;,
  ,& # 39;& lt; & lt; (^) z>在[b] & lt;,在[[u (c) [v] {z}] g] [/b [(]) v (v) (+)) (v) & # 39;,
  ,& # 39;[[b]] [g (v)] & lt; z> ([{e {& lt;→+}} [*] d<+祝辞]g [[a], & lt; +祝辞(v) {b} & lt; e>)){一}(u) & # 39;】
  for  row 拷贝行:=,stack  []
  label =, True
  ,for  char 拷贝行:
  if 才能;char  open_brackets:拷贝
  ,,stack.append(字符)
  elif 才能;char  close_brackets:拷贝
  ,,if  len(栈),& lt;, 1:
  ,,,label =False
  ,才能打破
  ,,elif  brackets_map (char),==,堆栈[1]:
  ,,,stack.pop ()
  ,,:
  ,,,label =False
  ,才能打破
  其他的才能:
  ,才能继续
  ,if  stack  !=, []:
  label 才能=False
  ,打印(标签)

运行结果:



错真正

3。

在长度很大的时候可以尽快判断一些比较明显的错误的模式,节省时间:

<强>主要的思路:

首先设置两个列表分别存放的是各种括号的开括号和闭括号,然后遍历给定的字符串,分如下几种情况:

<李>

字符串首字符出现在闭括号列表中,直接结束,输出错误

<李>

字符串长度不为偶数,直接结束,输出错误

<李>

对原始字符串列表化去重,如果去重后的列表长度不为偶数直接结束,输出错误

<李>

遍历字符串,将属于开括号集合的括号加入到列表中,当遇上一个闭括号的时候计算该闭括号在闭括号列表中的索引与当前列表最后一个开括号在开括号列表中的索引是否一致,一致则继续,否则直接结束,输出错误

# !/usr/bin env  python   #,编码:utf - 8   def  bracket_mathch (one_str):   ,& # 39;& # 39;& # 39;& # 39;& # 39;   ,括号匹配   ,& # 39;& # 39;& # 39;=,tmp_list  []=,open_bracket_list  [& # 39; (& # 39;, & # 39; [& # 39;, & # 39; {& # 39;, & # 39; & lt; & # 39;,, & # 39;《& # 39;】=,close_bracket_list  [& # 39;) & # 39;, & # 39;] & # 39;,, & # 39;} & # 39;, & # 39; & # 39;,, & # 39;》& # 39;】=,one_str_list 列表(one_str)=,length , len (one_str_list)=,set_list 列表(设置(one_str_list))=,num_list  [one_str_list.count(一个),for  one 拷贝set_list]   ,if  one_str[0],拷贝close_bracket_list:   return 才能;错误的   %,elif  length  2, !=, 0:   return 才能;错误的   ,elif  len (set_list), %, 2, !=, 0:   return 才能;错误的   ,其他的:   for 才能小姐:拷贝范围(长度):   ,,if  one_str[我],拷贝open_bracket_list:   ,,,tmp_list.append (one_str[我])   ,,elif  one_str[我],拷贝close_bracket_list:   ,,,if  close_bracket_list.index (one_str[我]),==,open_bracket_list.index (tmp_list [1]):   ,,,,tmp_list.pop ()   ,,,:   ,,,,return 错误的   ,,,,休息   return 真正的   if  __name__ ==, & # 39; __main__ # 39;:=,one_str_list  [& # 39; ({}) & # 39;,, & # 39; ({[& lt;《》祝辞]})& # 39;,,& # 39;[(]){}& # 39;,& # 39;{{{{{{& # 39;,& # 39;(({}))& # 39;,,& # 39;}{(())& # 39;   null   null   null   null   null   null   null

Python如何实现的括号匹配判断功能