這篇文章主要介紹了Python實現求解括號匹配問題的方法,涉及Python基於棧的字符串遍歷、判斷、運算解決括號匹配相關操作技巧,有需要的朋友可以參考下
#本文實例講述了Python實作求解括號匹配問題的方法。分享給大家供大家參考,具體如下:
這個在本科學習資料結構的時候已經接觸很多了,主流的思想是藉助棧的壓入、彈出來進行匹配,至於python的話可以使用列表來完成這個操作,因為列表的append
方法相當於堆疊的push
方法,列表的pop
方法相當於堆疊的pop
方法。
主要的想法:
首先設定兩個清單分別存放的是各種括號的開括號和閉括號,然後遍歷給定的字串,分下列幾種情況:
1.字串首字元出現在閉括號清單中,直接結束,輸出錯誤
2.字串長度不為偶數,直接結束,輸出錯誤
3.將原始字串列表化去重,如果去重後的列表長度不為偶數直接結束,輸出錯誤
4.遍歷字串,將屬於開括號集合的括號加入到列表中,當遇到一個閉括號的時候計算該閉括號在閉括號列表中的索引與當前列表最後一個開括號在開括號列表中的索引是否一致,一致則繼續,否則直接結束,輸出錯誤
主要是在長度很大的時候可以盡快判斷一些比較明顯的錯誤的模式,節省時間,按照這個簡單的思想,下面是具體的實現:
#!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:括号匹配的相关问题 ''' def bracket_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: 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, '错误' tmp='{}[{()()[]<{{[[[[(())()()(){}[]{}[]()<>]]]]}}>}]' print bracket_mathch(tmp)
結果如下:
以上是Python實作求解括號匹配問題的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!