栈的应用之判断文本括号是否正确

版权声明:本文为博主原创文章,未经博主允许可以转载。 https://blog.csdn.net/killeri/article/details/83031593

栈的一个经典应用就是判断一个文本中的括号,包括小括号,中括号,大括号是不是有缺失,顺序不正确等情况。

栈的类的实现在前面文章中已经实现,我们这里直接应用(用的是顺序表实现的栈)
两种解法:第二种解法有细节
第一种解答法如下:

# _*_ coding:utf-8 _*_

"""
用于检查文本中的括号是不是使用正确,
对于文本中括号的缺少等问题都能够检测

"""

from 栈的顺序表实现 import Stack, StackOverFlow

parensK = "([{"
parensG = ")]}"
parensDict = { ")" : "(", "]" : "[", "}" : "{" }

# 建立一个栈的实例

class Solution:
    stack = Stack()

    def __init__(self, string):
        self.string = string

    def check(self):
        for char in self.string:
        '''
        遍历字符串,找出括号字符进行判断
        '''
            if char in parensK:
                self.stack.push(char)
            elif char in parensG:
                pchar = self.stack.pop()
                if parensDict[char] != pchar:
                    raise StackOverFlow("A not match char")
        if not self.stack.is_empty():
            raise StackOverFlow("dont shut it down")

string = "({}[()])"
solution = Solution(string)
solution.check()

第二种解法代码如下:

# _*_ coding:utf-8 _*_

"""
一下这个实现方法,利用了栈的存储原理
但是破坏了栈的操作,可以输出整个文本中
所有括号的出现顺序

"""
from 栈的顺序表实现 import Stack, StackOverFlow

def check_parens(text):
    """
    括号配对检查函数,text是被检查的文本
    """
    parens = "()[]{}"
    open_parens = "([{"
    opposite = { ")" : "(", "]" : "[", "}" : "{" }
    # 用字典来检测

    def parentheses(text):
        """
        括号生成器,每次调用返回下一次text里的下一个括号及其位置
        使用一个生成器来每次调度都会生成text中的下一个括号
        """
        i, text_len = 0, len(text)
        while True:
            while i < text_len and text[i] not in parens:
                i += 1
            if i >= text_len:
                return
            yield text[i], i
            i += 1
    st = Stack()
    # 保存括号的栈
    
    for pr, i in parentheses(text):
        """
        这里就调用了生成器函数
        """
        if pr in open_parens:
            st.push(pr)
        elif st.pop() != opposite[pr]:
            # 这里首先执行st.pop(),所以栈顶的元素一定会被删除
            print("Unmatching is found at", i , "for", pr)
            return False

    print("All parentheses are correctly matched")
    return True

check_parens("([]{}())")


                        
                

猜你喜欢

转载自blog.csdn.net/killeri/article/details/83031593
今日推荐