国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現的括號匹配判斷功能示例

2020-02-15 22:17:10
字體:
來源:轉載
供稿:網友

本文實例講述了Python實現的括號匹配判斷功能。分享給大家供大家參考,具體如下:

1.用一個棧【python中可以用List】就可以解決,時間和空間復雜度都是O(n)

# -*- coding: utf8 -*-# 符號表SYMBOLS = {'}': '{', ']': '[', ')': '(', '>': '<'}SYMBOLS_L, SYMBOLS_R = SYMBOLS.values(), SYMBOLS.keys()def check(s): arr = [] for c in s:  if c in SYMBOLS_L:   # 左符號入棧   arr.append(c)  elif c in SYMBOLS_R:   # 右符號要么出棧,要么匹配失敗   if arr and arr[-1] == SYMBOLS[c]:    arr.pop()   else:    return False return Trueprint(check("3 * {3 +[(2 -3) * (4+5)]}"))print(check("3 * {3+ [4 - 6}]"))

運行結果:

True
False

2.

# -*- coding: utf8 -*-# 存儲左括號和右括號open_brackets = '([{<'close_brackets = ')]}>'# 映射左右括號便于出棧判斷brackets_map = {')': '(', ']': '[', '}': '{', '>': '<'}# 對于每一行數據,進行如下判定若括號為左括號,加入棧,若括號為右括號,判斷是否跟棧尾括號對應,# 若對應,彈出棧尾元素,若所有括號均正確閉合,則最后棧為空。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)

運行結果:

False
True
False
True

3.

在長度很大的時候可以盡快判斷一些比較明顯的錯誤的模式,節省時間:

主要的思路:

首先設置兩個列表分別存放的是各種括號的開括號和閉括號,然后遍歷給定的字符串,分如下幾種情況:

    字符串 首字符 出現在閉括號列表中,直接結束,輸出錯誤 字符串長度不為偶數,直接結束,輸出錯誤 對原始字符串列表化去重,如果去重后的列表長度不為偶數直接結束,輸出錯誤 遍歷字符串,將屬于開括號集合的括號加入到列表中,當遇上一個閉括號的時候計算該閉括號在閉括號列表中的索引與當前列表最后一個開括號在開括號列表中的索引是否一致,一致則繼續,否則直接結束,輸出錯誤
#!usr/bin/env python# encoding:utf-8def 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 Trueif __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))            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德兴市| 小金县| 本溪| 武功县| 英德市| 慈利县| 永善县| 岱山县| 铜山县| 永昌县| 富平县| 陵川县| 西宁市| 讷河市| 盐城市| 土默特左旗| 姚安县| 陇南市| 高清| 临夏县| 新民市| 阿瓦提县| 彰化县| 仙居县| 翁源县| 新乡县| 安平县| 广南县| 吉隆县| 三江| 平潭县| 保康县| 防城港市| 巴塘县| 息烽县| 丰台区| 锦屏县| 西平县| 洛川县| 观塘区| 托里县|