本文主要介绍python的括号匹配方法的详细讲解,通过实例代码详细介绍,对大家的学习或工作有一定的参考价值,有需要的朋友可以参考一下。
本文主要介绍python的括号匹配方法的详细讲解,通过实例代码详细介绍,对大家的学习或工作有一定的参考价值,有需要的朋友可以参考一下。
1.可以用一个栈解决python中可以用List,时间和空间复杂度都是O(n)
# -*-编码:utf8 -*-
#符号表
SYMBOLS={'}': '{ ',']': '[',')': '(',' ':' ' }
SYMBOLS_L,SYMBOLS_R=SYMBOLS.values(),SYMBOLS.keys()
定义检查:
arr=[]
对于s中的c:
如果c在SYMBOLS_L中:
#堆栈中的左侧符号
数组追加(c)
符号中的elif c _ R:
#右边的符号要么弹出堆栈,要么匹配失败。
if arr和arr[-1]==SYMBOLS[c]:
arr.pop()
否则:
返回False
返回True
print(check('3 * {3 [(2 -3) * (4 5)]))
打印(check('3 * {3 [4 - 6}]'))
2.
#存放左括号和右括号
open_brackets='([{ '
close_brackets=')]} '
#映射左右括号,便于判断堆栈。
括号_map={ ')':'(',']': '[',' }': '{ ',' ':' ' }
#对于每一行数据,进行以下确定。如果括号是左括号,则将其添加到堆栈中。如果括号是右括号,确定它是否对应于堆栈末尾的括号。
如果是这样,则弹出stack元素的end,如果所有的括号都正确结束,则最后一个堆栈为空。
对于行中的行:
stack=[]
标签=真
对于行中的字符:
如果用左括号括起来:
stack.append(字符)
右括号中的elif字符:
如果镜头(堆栈)1:
标签=假
破裂
elif括号_map[char]==堆栈[-1]:
stack.pop()
否则:
标签=假
破裂
否则:
继续
if栈!=[]:
标签=假
打印(标签)
行数=[
'([^x[ ]{a}]{/}{t}g^){x}b{x}z({%}w[b][c[c]]{ h { h } } ',
'[/]{((x)({{*}*}w)w){f}{v}[%(^[z]{u}{ })([[]-]h)]{ c }(*)[y]} ',
'(^)z[b][[(c)u[v]{ zb b }]g][/b[(])v(v)()](v)',
[[b]][(v)g]z([{ {-} e }[*]d]g[[a](v){ b } e]){ a }[u]']
3.
长度较大时,可以尽快判断出一些明显的错误模式,节省时间:
主要观点:
首先设置两个列表分别存储各个括号的开括号和闭括号,然后遍历给定的字符串,如下:
1.字符串的第一个字符出现在右括号列表中,所以直接结束,输出是错误的。
2.字符串长度不均匀,直接结束,输出错误。
3.列出原始字符串以删除重复项。如果删除的列表长度不是偶数,会直接结束,输出会出错。
4.遍历字符串,将属于开括号集的括号添加到列表中,当遇到闭括号时,计算闭括号在闭括号列表中的索引。
当前列表中最后一个左括号的索引在左括号列表中是否一致;如果是,继续;否则,它将直接以输出错误结束。
#!usr/bin/env python
#编码:utf-8
def bracket_mathch(one_str):
'''''
括号匹配
'''
tmp_list=[]
open_bracket_list=['(','[',' { ','',' <']
close_bracket_list=[')',']',' } ','',' " " ']
one_str_list=list(one_str)
length=len(一个字符串列表)
set_list=list(set(one_str_list))
num _ list=[one _ str _ list . count(one)for one in set _ list]
如果close_bracket_list中有one_str[0]:
返回False
elif长度% 2!=0:
返回False
elif len(set_list) % 2!=0:
返回False
否则:
对于范围内的I(长度):
if one _ str[I]in open _ bracket _ list:
tmp_list.append(one_str[i])
elif one _ str[I]in close _ bracket _ list:
if close _ bracket _ list . index(one _ str[I])==open _ bracket _ list . index(tmp _ list[-1]):
tmp_list.pop()
否则:
返回False
破裂
返回True
if __name__=='__main__ ':
one_str_list=['({})','({[ 《》 ]})','[(]){} ',' {{{{{{ ','([{}])',' }{[()]']
对于one_str_list中的one_str:
if bracket_mathch(one_str):
Print(one_str,'正确')
否则:
Print(one_str,' error ')
tmp=' { }[{()()[]{ {[[(()()()(){ }[]{ }[]{ }[]()]]]} }]'
print(bracket_mathch(tmp))
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。