括号序列

题目

给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。

eg:

输入"["

输出 False

输入“{}”

输出 True

分析

  1. 定义一个栈,列表就行,用来接收或者比较 S 的每个字符。
  2. 首先进行判断,如果栈为空,直接 append,否则的话进行判断,如果和前一个字符相等,直接添加,因为相等的字符肯定不是括号序列,然后依次进行判断每个字符和栈顶字符是否是一对,如果是就弹出栈顶。

实现代码:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
class Solution:
    def isValid(self, s):
        valid_list = []
        for valid in s:
            if len(valid_list) == 0:
                valid_list.append(valid)
            elif valid_list[-1]==valid:
                valid_list.append(valid)
            else:
                if valid =="}" and valid_list[-1]=="{":
                    valid_list.pop()
                elif valid =="]" and valid_list[-1]=="[":
                    valid_list.pop()
                elif valid ==")" and valid_list[-1]=="(":
                    valid_list.pop()
        return False if len(valid_list) else True

if __name__ == "__main__":
    s = Solution()
    result = s.isValid("[(){}]")
    print(result)
不论你在什么时候开始,重要的是开始之后就不要停止。 不论你在什么时候结束,重要的是结束之后就不要悔恨。
原文地址:https://www.cnblogs.com/yunhgu/p/13954166.html