ブレースマッチング問題は、スタックの古典的なアプリケーションであり、
タイトル
括弧内のテキストを分析するが、閉じている
ようなテキスト= "({[( {{ABC}})]、[{1}]})2([]){({[]})} []"、 すべてのブラケットを分析することは閉じられています
考え
- 文字がLIFOスタックの使用、原則
([{
1、スタック - 文字がある場合は
)]}
1、スタックの先頭と現在の文字がペアであるかどうかを判断し、 - それが一致した場合、ポップアップブラケット(ブロックされた一致括弧)は、次の文字を決定するために続けて
- ない場合は、直接には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))
注意:
- PEP8は時に手書きのコードをクリアし、効率的なコードを記述し、規範に従うことをお勧めします
- 戻るis_ bool型で先頭に
- 標準のドキュメンテーション文字列のコメントを書くことが推奨(他のコメント#が書いていません)
- 注最適化アルゴリズム
詳細については、マイクロ文字の学習を追加追加してください:lockingfree取得