LeetCode 20. Valid Parentheses

栏目: 编程工具 · 发布时间: 7年前

内容简介:Given a string containing just the charactersAn input string is valid if:Note that an empty string is also considered valid.
  • 英文:

Given a string containing just the characters '(' , ')' , '{' , '}' , '[' and ']' , determine if the input string is valid.

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.

Note that an empty string is also considered valid.

  • 中文:

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例

  • 示例 1:
输入: "()"
输出: true
  • 示例 2:
输入: "()[]{}"
输出: true
  • 示例 3:
输入: "(]"
输出: false
  • 示例 4:
输入: "([)]"
输出: false
  • 示例 5:
输入: "{[]}"
输出: true

题解

  • 题解 1

使用栈来实现,检查字符串序列,如果遇到左半边括号,则入栈,如果遇到右半边括号,且栈不为空,则出栈,如果最后栈为空,则表示字符串有效。另外,需考虑特殊情况,即只有右半边括号的情况,这时采用标志位标识这种情况,一旦出现这种情况,字符串无效。

class Solution:
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        stack = []
        flag = 1
        for i in s:
            if i == '(' or i == '{' or i == '[':  # 左半边括号入栈
                stack.append(i)
            elif stack and ((i == ')' and stack[-1] == "(") or (i == '}' and stack[-1] == "{") or (
                    i == ']' and stack[-1] == "[")):  # 遇到右半边括号,且栈不为空
                stack.pop()
            else:  # 标识只有右半边括号的情况
                flag = 0
        if flag == 0 or stack:
            return False
        else:
            return True
  • 题解 2

使用字典存储括号对,依然时左半边括号入栈,遇到右半边括号时,检查栈是否为空,如果为空则表示出现只有右半边括号的七情况,返回 False;如果右半边括号不等于栈顶元素,即括号不对称相等,也返回 False;如果最后栈为空,则表示字符串有效,返回 True,否则,返回 False。

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if len(s) % 2 != 0:  # 过滤括号数量不是偶数的情况
            return False
        lb = {'(': ')', '[': ']', '{': '}'}  # 括号对
        stack = []
        for x in s:
            if x in lb:  # 左半边括号入栈
                stack.append(x)
            else:  # 右半边括号
                if len(stack) == 0:  # 栈内没有左半边括号,字符串无效
                    return False
                top = stack.pop()
                if lb[top] != x:  # 括号不对称相等
                    return False
        return len(stack) == 0  # 栈为空时则表示字符串有效

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构与算法经典问题解析

数据结构与算法经典问题解析

纳拉辛哈·卡鲁曼希 / 骆嘉伟 / 机械工业出版社 / 2016-6-1 / CNY 79.00

本书是一本数据结构方面的优秀教材,以Java为描述语言,介绍了计算机编程中使用的数据结构和算法。本书强调问题及其分析,而非理论阐述,共分为21章,讲述了基本概念、递归和回溯、链表、栈、队列、树、优先队列和堆、并查集DAT、图算法、排序、查找、选择算法(中位数)、符号表、散列、字符串算法、算法设计技术、贪婪算法、分治算法、动态规划算法、复杂度类型等内容。每章首先阐述必要的理论基础,然后给出问题集。全......一起来看看 《数据结构与算法经典问题解析》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

MD5 加密
MD5 加密

MD5 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具