博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode Notes_#20 Valid Parentheses
阅读量:6263 次
发布时间:2019-06-22

本文共 1691 字,大约阅读时间需要 5 分钟。

LeetCode Notes_#20 Valid Parentheses

Contents

题目

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

An input string is valid if:

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

Note that an empty string is also considered valid.

Example 1:

Input: "()"

Output: true

Example 2:

Input: "()[]{}"

Output: true

Example 3:

Input: "(]"

Output: false

Example 4:

Input: "([)]"

Output: false

Example 5:

Input: "{[]}"

Output: true

思路和解答

思路

判断一个字符串的括号的闭合规则是否是正确的,包括:

  • 括号的类型要正确
  • 括号闭合的顺序要正确
    遍历一遍,按顺序地,分别地,把左括号都取出来,右括号都取出来,分别是一个list,然后看两个列表的对应元素是否配对。
    • 首先list的长度必须相同
    • 然后逐一比较是否是配对的
    • 遇到不配对,直接返回false;遍历到最后没有发现不配对,那么就是true。
      漏洞:()[{(})]
      所以需要考虑序号的因素....

还是去看了一下题解,是使用栈来做的

  • 遍历整个字符串,遇到左括号就入栈
  • 遇到右括号,先看栈是否为空,如果是直接返回false;否则就看跟栈中的左括号可不可以配对,不可以返回false。一轮循环后没有返回的话,说明左右括号配对,就弹出左括号。
  • 最后看栈中是否为空,如果为空那么返回true(如果非空说明有左括号剩下找不到配对的右括号)

解答

class Solution(object):    def isValid(self, s):        """        :type s: str        :rtype: bool        """        stack=[]        leftParen=['(','[','{']        rightParen=[')',']','}']        for i in range(len(s)):            if s[i] in leftParen:                stack.append(s[i])            else:                if stack==[]:                    return False                else:                    if stack[-1]=='(' and s[i]!=')':                        return False                    if stack[-1]=='[' and s[i]!=']':                        return False                     if stack[-1]=='{' and s[i]!='}':                        return False                    stack.pop()        return stack==[]

转载于:https://www.cnblogs.com/Howfars/p/9832415.html

你可能感兴趣的文章
内存溢出
查看>>
如何重启IIS进程
查看>>
分享一个javascript alert精简框架
查看>>
【解决方法】System.IO.FileNotFoundException
查看>>
Android 命令行编译、打包生成apk文件
查看>>
java中解决组件重叠的问题(例如鼠标移动组件时)
查看>>
使用 Navicat 8.0 管理mysql数据库(导出导入数据)
查看>>
视频会议
查看>>
EntityFramework系列:SQLite.CodeFirst自动生成数据库
查看>>
网络编码
查看>>
定时任务-在spring中配置quartz
查看>>
【springMVC 后台跳转前台】1.使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中 ----2.前后台都没有报错,不能进入ajax回调函数...
查看>>
redis+Keepalived主从热备秒级切换
查看>>
Hibernate占位符警告:use named parameters or JPA-style positional parameters instead.
查看>>
基于 IdentityServer3 实现 OAuth 2.0 授权服务数据持久化
查看>>
是什么时候开始学习gulp了
查看>>
【Cocos2d-x游戏开发】细数Cocos2d-x开发中那些常用的C++11知识
查看>>
otl使用存储过程或是LEFT JOIN时提示输出类型未知的问题
查看>>
集群(cluster)原理(转)
查看>>
小数格式:
查看>>