Pythonは刻まれ:括弧は、スタックを使用してマッチング処理

ブレースマッチング問題は、スタックの古典的なアプリケーションであり、

タイトル
括弧内のテキストを分析するが、閉じている
ようなテキスト= "({[( {{ABC}})]、[{1}]})2([]){({[]})} []"、 すべてのブラケットを分析することは閉じられています

考え

  1. 文字がLIFOスタックの使用、原則([{1、スタック
  2. 文字がある場合は)]}1、スタックの先頭と現在の文字がペアであるかどうかを判断し、
  3. それが一致した場合、ポップアップブラケット(ブロックされた一致括弧)は、次の文字を決定するために続けて
  4. ない場合は、直接にはFalseを返します

関連するコード

#!/usr/bin/python3

text = "({[({{abc}})][{1}]})2([]){({[]})}[]"


def is_closed(text:str) -> bool:  
    """
    判断文本中括号是否封闭
    :param:text 包含括号的文本字符串
    :returns: True无括号或所有括号全部封闭
                   False 存在括号不封闭
    """
    stack = []  # 使用list模拟栈, stack.append()入栈, stack.pop()出栈并获取栈顶元素
    brackets = {')':'(',']':'[','}':'{'}  # 使用字典存储括号的对应关系, 使用反括号作key方便查询对应的括号
    for char in text:
        if char in brackets.values():   # 如果是正括号,入栈
            stack.append(char)
        elif char in brackets.keys():  # 如果是反括号
            if brackets[char] != stack.pop():  # 如果不匹配弹出的栈顶元素
                return False
    return True

print(is_closed(text))

注意:

  1. PEP8は時に手書きのコードをクリアし、効率的なコードを記述し、規範に従うことをお勧めします
  2. 戻るis_ bool型で先頭に
  3. 標準のドキュメンテーション文字列のコメントを書くことが推奨(他のコメント#が書いていません)
  4. 注最適化アルゴリズム

詳細については、マイクロ文字の学習を追加追加してください:lockingfree取得

おすすめ

転載: www.cnblogs.com/superhin/p/11454799.html