本文主要详细介绍了python如何实现括号匹配方法。 本文通过示例代码进行了介绍。 具体来说,在大家的学习和工作上有一定的参考学习网上有销售。 需要的朋友请学习
1 .一个堆栈就可以用【python上可以使用List】解决。 时间和空间的复杂性是o(n ) ) ) )。
#-* -编码: utf8-* -
#符号表
SYMBOLS={'}': '{,' ]': '[,' ]': ' () )、)、) : )。
SYMBOLS_L,SYMBOLS_R=SYMBOLS.values (),SYMBOLS.keys ) )。
defcheck(s ) :
arr=[]
for c in s:
if c in SYMBOLS_L:
#左符号堆栈
是ARR.append(c )
elif c in SYMBOLS_R:
#右符号离开堆栈或匹配失败
ifarrandarr [-1 ]==symbols [ c ] :
arr.pop () )
else:
返回假
返回真
print (检查('3* {3((2-3) )4) } )
print (检查(3* {3[4-6] ) } )
2.
#容纳左括号和右括号
open_brackets=' (
close_brackets=' ) } '
#映射左右括号,便于堆栈判定
brackets_map={'}': ' (',' ]': '[,]':'{,' : ' ',' :'} )
#关于各行数据,如果括号是左括号则放入堆栈中,如果括号是右括号则如下判定是否与堆栈末尾括号对应,
如果对应,则弹出堆栈末尾的元素,如果正确关闭了所有括号,则最终堆栈为空。
for row in rows:
stack=[]
label=True
for char in row:
if char in open_brackets:
stack.append(char ) )
elif char in close_brackets:
if len (堆叠) 1:
label=False
布雷克
elif brackets _ map [ char ]==stack [-1 ] :
stack.pop (
else:
label=False
布雷克
else:
连续
If堆栈!=[]:
label=False
是打印(label )
rows=[
' [ x [ ] { a } ] {/} { t } g } { x } [ b ] [ c [ c ] { { h } },
(' [/]{((x ) ) ) (w ) (f ) ) (v ) ) () ) ) ) ) 652
' [b][[[c]u[v]{z}]g][/b[]]v[v] () ) ) ) ) ) ) ),
' [ b ] ] [ [ v ] g ] [ { } e } [ * ] d ] g [ [ a ] [ v ] { b } ] ] { a } [ u ] ]
3.
长度较大时,可以尽快判断明显错误的项目,节约时间:
主要想法:
首先,分别存储在两个列表中的是各种括号的大括号和大括号,遍历下一个给定的字符串的情况如下。
1 .右括号列表中显示字符串的开头字符,直接结束,输出错误
2 .字符串长度不为偶数,直接结束,输出错误
3 .将原始字符串列表化并加重,加重后的列表长度不变为偶数并直接结束时,输出错误
4 .遍历字符串,将属于大括号集合的括号添加到列表中,遇到大括号时,使用大括号列表中的索引和
当前列表中最后一个大括号的大括号列表中的索引是否匹配。 匹配时继续,不匹配时直接结束,输出错误
#! usr/温和的小懒汉/env python
# encoding:utf-8
defbracket_mathch(one_str ) :
'''''''
括号匹配
''''
tmp_list=[]
open_bracket_list=[ ' ()、)、)、)、)、)。
close_bracket_list=[ '' ) '、' ]、' }、'、'、' '、' ' ' ]]
one_str_list=list(one_str )
Length=Len(one_str_list ) ) ) ) ) ) ) ) ) )。
set_list=list(set(one_str_list ) )
num _ list=[ one _ str _ list.count (one ) for one in set_list]
if one _ str [0] in close _ bracket _ list :
返回假
elif length % 2!=0:
返回假
Eliflen(set_list ) % 2!=0:
返回假
else:
foriinrange (长度) :
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 (
else:
返回假
布雷克
返回真
if __name__=='__main__':
one_str_list=['({} ) '、' ({{}} ) '、' [{}]、' {{}}{{}}、{ { } } { } { } { } } { } { }
for one_str in one_str_list:
ifbracket_mathch(one_str ) :
print(one_str,“正确”
else:
print(one_str,错误
tmp='{}[{ () ) ) ) ] ) ) )。
打印(bracket _ math ch (tmp ) )
希望以上是正文的全部内容,对大家的学习有帮助。 另外,我希望大家支持我购买源代码。