Python實作求解括號匹配問題的方法

不言
發布: 2018-04-17 10:57:55
原創
2154 人瀏覽過

這篇文章主要介紹了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=[&#39;(&#39;,&#39;[&#39;,&#39;{&#39;,&#39;<&#39;,&#39;《&#39;]
 close_bracket_list=[&#39;)&#39;,&#39;]&#39;,&#39;}&#39;,&#39;>&#39;,&#39;》&#39;]
 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__ == &#39;__main__&#39;:
 one_str_list=[&#39;({})&#39;,&#39;({[<《》>]})&#39;,&#39;[(]){}&#39;,&#39;{{{{{{&#39;,&#39;([{}])&#39;,&#39;}{[()]&#39;]
 for one_str in one_str_list:
  if bracket_mathch(one_str):
   print one_str, &#39;正确&#39;
  else:
   print one_str, &#39;错误&#39;
 tmp=&#39;{}[{()()[]<{{[[[[(())()()(){}[]{}[]()<>]]]]}}>}]&#39;
 print bracket_mathch(tmp)
登入後複製

結果如下:

以上是Python實作求解括號匹配問題的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!