小編給大家分享一下Python如何實(shí)現(xiàn)的括號(hào)匹配判斷功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
在興化等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷,成都外貿(mào)網(wǎng)站制作,興化網(wǎng)站建設(shè)費(fèi)用合理。1.用一個(gè)?!緋ython中可以用List】就可以解決,時(shí)間和空間復(fù)雜度都是O(n)
# -*- coding: utf8 -*- # 符號(hào)表 SYMBOLS = {'}': '{', ']': '[', ')': '(', '>': '<'} SYMBOLS_L, SYMBOLS_R = SYMBOLS.values(), SYMBOLS.keys() def check(s): arr = [] for c in s: if c in SYMBOLS_L: # 左符號(hào)入棧 arr.append(c) elif c in SYMBOLS_R: # 右符號(hào)要么出棧,要么匹配失敗 if arr and arr[-1] == SYMBOLS[c]: arr.pop() else: return False return True print(check("3 * {3 +[(2 -3) * (4+5)]}")) print(check("3 * {3+ [4 - 6}]"))
運(yùn)行結(jié)果:
True
False
2.
# -*- coding: utf8 -*- # 存儲(chǔ)左括號(hào)和右括號(hào) open_brackets = '([{<' close_brackets = ')]}>' # 映射左右括號(hào)便于出棧判斷 brackets_map = {')': '(', ']': '[', '}': '{', '>': '<'} # 對(duì)于每一行數(shù)據(jù),進(jìn)行如下判定若括號(hào)為左括號(hào),加入棧,若括號(hào)為右括號(hào),判斷是否跟棧尾括號(hào)對(duì)應(yīng), # 若對(duì)應(yīng),彈出棧尾元素,若所有括號(hào)均正確閉合,則最后棧為空。 rows = [ '([<^>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]{z<b< >><b>}]g][/b[(])v(v)(+)](v)', '[[b]][(v)g]<z>([{{<->+}e}[*]d<+>]g[[a] <+>(v)<e>]){a}[u]'] 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(stack) < 1: label = False break elif brackets_map[char] == stack[-1]: stack.pop() else: label = False break else: continue if stack != []: label = False print(label)
運(yùn)行結(jié)果:
False
True
False
True
3.
在長(zhǎng)度很大的時(shí)候可以盡快判斷一些比較明顯的錯(cuò)誤的模式,節(jié)省時(shí)間:
主要的思路:
首先設(shè)置兩個(gè)列表分別存放的是各種括號(hào)的開括號(hào)和閉括號(hào),然后遍歷給定的字符串,分如下幾種情況:
字符串 首字符 出現(xiàn)在閉括號(hào)列表中,直接結(jié)束,輸出錯(cuò)誤
字符串長(zhǎng)度不為偶數(shù),直接結(jié)束,輸出錯(cuò)誤
對(duì)原始字符串列表化去重,如果去重后的列表長(zhǎng)度不為偶數(shù)直接結(jié)束,輸出錯(cuò)誤
遍歷字符串,將屬于開括號(hào)集合的括號(hào)加入到列表中,當(dāng)遇上一個(gè)閉括號(hào)的時(shí)候計(jì)算該閉括號(hào)在閉括號(hào)列表中的索引與當(dāng)前列表最后一個(gè)開括號(hào)在開括號(hào)列表中的索引是否一致,一致則繼續(xù),否則直接結(jié)束,輸出錯(cuò)誤
#!usr/bin/env python # encoding:utf-8 def bracket_mathch(one_str): ''''' 括號(hào)匹配 ''' 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: return False elif length % 2 != 0: return False elif len(set_list) % 2 != 0: return False else: for i in range(length): 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: return False break return True if __name__ == '__main__': one_str_list = ['({})', '({[<《》>]})', '[(]){}', '{{{{{{', '([{}])', '}{[()]'] for one_str in one_str_list: if bracket_mathch(one_str): print(one_str, '正確') else: print(one_str, '錯(cuò)誤') tmp = '{}[{()()[]<{{[[[[(())()()(){}[]{}[]()<>]]]]}}>}]' print(bracket_mathch(tmp))
運(yùn)行結(jié)果:
('({})', '\xe6\xad\xa3\xe7\xa1\xae')
('({[<\xe3\x80\x8a\xe3\x80\x8b>]})', '\xe6\xad\xa3\xe7\xa1\xae')
('[(]){}', '\xe9\x94\x99\xe8\xaf\xaf')
('{{{{{{', '\xe9\x94\x99\xe8\xaf\xaf')
('([{}])', '\xe6\xad\xa3\xe7\xa1\xae')
('}{[()]', '\xe9\x94\x99\xe8\xaf\xaf')
True
以上是“Python如何實(shí)現(xiàn)的括號(hào)匹配判斷功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站題目:Python如何實(shí)現(xiàn)的括號(hào)匹配判斷功能-創(chuàng)新互聯(lián)
瀏覽路徑:http://jinyejixie.com/article8/dhdiop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、企業(yè)建站、網(wǎng)站設(shè)計(jì)公司、外貿(mào)建站、關(guān)鍵詞優(yōu)化、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容