/*
* @lc app=leetcode.cn id=20 lang=c
*
* [20] 有效的括号
*
* https://leetcode-cn.com/problems/valid-parentheses/description/
*
* algorithms
* Easy (36.53%)
* Total Accepted: 49.8K
* Total Submissions: 136K
* Testcase Example: '"()"'
*
* 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
*
* 有效字符串需满足:
*
*
* 左括号必须用相同类型的右括号闭合。
* 左括号必须以正确的顺序闭合。
*
*
* 注意空字符串可被认为是有效字符串。
*
* 示例 1:
*
* 输入: "()"
* 输出: true
*
*
* 示例 2:
*
* 输入: "()[]{}"
* 输出: true
*
*
* 示例 3:
*
* 输入: "(]"
* 输出: false
*
*
* 示例 4:
*
* 输入: "([)]"
* 输出: false
*
*
* 示例 5:
*
* 输入: "{[]}"
* 输出: true
*
*/
bool isValid(char* s) {
if(*s==NULL){
return true;
}
int flag = ;
char a[];
int top,i;
char temp;
// 初始化一个栈
top = ;
for(i=;i<strlen(s);i++){
if(s[i]=='['){ // 如果是左括号直接入栈
a[++top]=s[i];
continue;
}
if(s[i]==']'){ // 如果是右括号,则尝试匹配
temp = a[top];
if(temp=='['){
flag = ;
top--;
continue;
}else{
flag = ;
break;
}
} if(s[i]=='('){ // 如果是左括号直接入栈
a[++top]=s[i];
continue;
}
if(s[i]==')'){ // 如果是右括号,则尝试匹配
temp = a[top];
if(temp=='('){
flag = ;
top--;
continue;
}else{
flag = ;
break;
}
}
if(s[i]=='{'){ // 如果是左括号直接入栈
a[++top]=s[i];
continue;
}
if(s[i]=='}'){ // 如果是右括号,则尝试匹配
temp = a[top];
if(temp=='{'){
flag = ;
top--;
continue;
}else{
flag = ;
break;
}
} }
if(flag&&(top==)){
return true;
}else{
return false;
}
}

如果是空的话,返回true。创建一个栈,top为栈内移动指针,如果是左括号,则存入栈中,top加一,如果是右括号,则和当前的栈顶元素进行匹配。匹配若成功,则top减一。匹配若不成功,则flag=0,直接跳出循环。

最后判断flag是否等于一,并且栈顶指针top是否为0(证明所有左括号都被匹配过)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

python:

#
# @lc app=leetcode.cn id=20 lang=python3
#
# [20] 有效的括号
#
# https://leetcode-cn.com/problems/valid-parentheses/description/
#
# algorithms
# Easy (36.53%)
# Total Accepted: 49.8K
# Total Submissions: 136K
# Testcase Example: '"()"'
#
# 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
#
# 有效字符串需满足:
#
#
# 左括号必须用相同类型的右括号闭合。
# 左括号必须以正确的顺序闭合。
#
#
# 注意空字符串可被认为是有效字符串。
#
# 示例 1:
#
# 输入: "()"
# 输出: true
#
#
# 示例 2:
#
# 输入: "()[]{}"
# 输出: true
#
#
# 示例 3:
#
# 输入: "(]"
# 输出: false
#
#
# 示例 4:
#
# 输入: "([)]"
# 输出: false
#
#
# 示例 5:
#
# 输入: "{[]}"
# 输出: true
#
#
class Solution:
def isValid(self, s: str) -> bool: stack=[] #设置一个列表,把该列表当做栈来使用即可。
dic={')':'(','}':'{',']':'['} #使用字典存储括号,并且右括号为key,左括号为value
for char in s:
if char in dic.values(): #左括号就入栈
stack.append(char)
elif char in dic.keys(): #有右括号的话就进行比较,
if stack==[] or dic[char] != stack.pop():
return False
else:
return False #不再字典中的输入直接输出错误 return stack==[] #如果栈最后是空的,那么则符合要求,输出true,如果不是,则输出false,使用一个条件表达式

Leecode刷题之旅-C语言/python-20.有效的括号的更多相关文章

  1. Leecode刷题之旅-C语言/python-1.两数之和

    开学后忙的焦头烂额(懒得很),正式开始刷leecode的题目了. 想了想c语言是最最基础的语言,虽然有很多其他语言很简单,有更多的函数可以用,但c语言能煅炼下自己的思考能力.python则是最流行的语 ...

  2. Leecode刷题之旅-C语言/python-387 字符串中的第一个唯一字符

    /* * @lc app=leetcode.cn id=387 lang=c * * [387] 字符串中的第一个唯一字符 * * https://leetcode-cn.com/problems/f ...

  3. Leecode刷题之旅-C语言/python-28.实现strstr()

    /* * @lc app=leetcode.cn id=28 lang=c * * [28] 实现strStr() * * https://leetcode-cn.com/problems/imple ...

  4. Leecode刷题之旅-C语言/python-7.整数反转

    /* * @lc app=leetcode.cn id=7 lang=c * * [7] 整数反转 * * https://leetcode-cn.com/problems/reverse-integ ...

  5. Leecode刷题之旅-C语言/python-434 字符串中的单词数

    /* * @lc app=leetcode.cn id=434 lang=c * * [434] 字符串中的单词数 * * https://leetcode-cn.com/problems/numbe ...

  6. Leecode刷题之旅-C语言/python-326 3的幂

    /* * @lc app=leetcode.cn id=326 lang=c * * [326] 3的幂 * * https://leetcode-cn.com/problems/power-of-t ...

  7. Leecode刷题之旅-C语言/python-263丑数

    /* * @lc app=leetcode.cn id=263 lang=c * * [263] 丑数 * * https://leetcode-cn.com/problems/ugly-number ...

  8. Leecode刷题之旅-C语言/python-383赎金信

    /* * @lc app=leetcode.cn id=383 lang=c * * [383] 赎金信 * * https://leetcode-cn.com/problems/ransom-not ...

  9. Leecode刷题之旅-C语言/python-349两整数之和

    /* * @lc app=leetcode.cn id=371 lang=c * * [371] 两整数之和 * * https://leetcode-cn.com/problems/sum-of-t ...

随机推荐

  1. piranha配置

    典型的高可用负载均衡 1)lvs + ldirectord + heartbeat lvs(ipvsadmin) 调度器,将用户请求分发到后端真实服务器,不负责健康检查 ldirectord 服务监控 ...

  2. IFrame安全问题解决办法(跨框架脚本(XFS)漏洞)

    最近项目要交付了,对方安全测试的时候检测出高危险漏洞,由于刚参加工作不久,经验不足,未涉及过此方面的东西.经过一番查询和探索,最终解决了这个问题,记录一下. 发现的漏洞为缺少跨框架脚本保护.跨框架脚本 ...

  3. django模板templates详解(二)

    1 总体结构 ​ Django是MTV结构,即:Model, Template, View Model:定义数据的存储格式,并且提供了数据库访问的API. View:定义那些数据被显示,是业务逻辑处理 ...

  4. mysql的安装和使用

    1.下载 数据库:mysql-3.23.53-win1 可视化工具:mysqlcc-0.9.4-win32 2.步骤: (1)解压mysql-3.23.53-win1(其他的也可以),按照步骤安装到你 ...

  5. 用批处理在windows中导出/导入无线网络信息,复制保存为bat即可

    @echo offtitle 在windows中导出/导入无线网络信息 :Beginecho ========================echo 请选择操作:echo 1 查看可用的无线网络ec ...

  6. UNIX PIPES 管道原稿

    40年前,Unix操作系统横空出世,Unix不仅仅带来了一个操作系统,还创造C语言,Socket,开源,黑客等等文化,这些文化影响着整个计算机世界的文明,直到今天. 如果说Unix是计算机文明中最伟大 ...

  7. CF873F 【Forbidden Indices】

    还有这么板子的题? 和你谷上后缀自动机的板子基本一样,区别就是之后这个位置是\(0\)才计入贡献 代码 #include<iostream> #include<cstdio> ...

  8. [19/03/21-星期四] 异常(Exception) (一)

    一.引言 在实际工作中,我们遇到的情况不可能是非常完美的.比如:你写的某个模块,用户输入不一定符合你的要求;你的程序要打开某个文件, 这个文件可能不存在或者文件格式不对 ,你要读取数据库的数据,数据可 ...

  9. Linux使用sz、rz命令下载、上传文件

    1.安装服务 yum -y install lrzsz 2.上传命令:rz 使用rz命令,会调用系统的资源管理器,选择文件进行上传即可.上传的文件默认保存linux当前所在目录 3.下载命令:sz 根 ...

  10. webstorm识别php代码

    在 setting --editor--filetype---找到html 在下面的框里点右边加好,添加*.php