给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。

输入格式:

输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。

输出格式:

如果括号配对,输出yes,否则输出no。

输入样例1:

sin(10+20)

输出样例1:

yes

输入样例2:

{[}]

输出样例2:

no

题解:

首先我们要读懂题干,这个题是要匹配括号,我们知道 :
1. ( ) 是匹配的,{ }和[ ]同理
2. ( } 是不匹配的,其余情况相同
3. ( { ) } 是不匹配的 因为这里的 ) 是要与最接近它的 左 括号进行匹配 也就是 “{” 很显然这两个符号不匹配,所以直接结束循环 打印 no (我们会发现 这个过程中我们并没有关心 “)” 后面的 “}” 是不是能找到匹配的对象,这一点很重要)
4. {() 是不匹配的 很显然左右括号数量不一致,无法做到所有括号成对匹配

好 那么我们可以开始设计流程了:

1.首先我们从字符串头部开始遍历:
只要没碰到右括号,我就一直往栈里塞左括号(当然前提是当前字符是左括号,若是其他字符的话就跳过本次循环,进入下一次)

2.然后,当我们碰到了右括号
(此时栈里的左括号们兴奋了起来,因为终于可以有右括号和他们进行配对了),
这时根据栈的性质,我们从栈顶取出(注意,是取出)一个左括号,然后与右括号进行配对,
如果配对成功(恭喜,左右嘉宾牵手成功),进入下一次循环;
如果配对失败(两人八字不合),那么直接打印no,结束程序

3.当我们结束了主循环,要回头看一下栈里是不是还有落单的左括号,
如果有,说明右括号不够用,直接输出no
如果栈空了,说明配对完成,输出yes


#include<stdio.h>
#include<string.h>int left(char c)//判断是不是左括号
{if(c=='('||c=='{'||c=='['){return 1;}return 0;
}int right(char c)//判断是不是右括号
{if(c==')'||c=='}'||c==']'){return 1;}return 0;
}int check(char left,char right)//判断左右括号是否匹配
{if(left=='('){return (right==')')?1:0;//如果相匹配返回1,否则返回0 }else if(left=='{'){return (right=='}')?1:0;}else return (right==']')?1:0;
}int main(){int i=0;char stack[200];//存左括号们的栈 int top=0;//栈顶 char s[200];//输入的字符串 gets(s);int l=strlen(s);for(i=0;i<l;i++){if(left(s[i])){stack[top++]=s[i];//左括号入栈 }else if(right(s[i])){if(check(stack[--top],s[i]))//左右括号开始匹配 {continue; //如果匹配就继续循环 }else{printf("no");//一旦出现不匹配的括号对就直接截停 输出no return 0;}}else continue;}if(!top)//如果栈空了,那么ok,没有单身狗 {printf("yes");return 0;}printf("no");//栈没空  输出no return 0;
}

7-2 括号匹配问题相关推荐

  1. [JS][编程题]括号匹配

    括号匹配 题目来源:牛客网 题目链接:括号匹配 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M 题目描述 给定一个只包含括号的字符串,判断字符串是否有效.其 ...

  2. c语言括号匹配的检验,检验括号匹配的算法

    用栈实现检验括号匹配的算法没啥具体描述,数据结构的知识,急用,有重赏 思想是 先进栈,获取第一个半边括号,标记一下,继续进栈直到获取到第二个与之匹配的另一外括号,然后出栈,取出内容.就这样.. 数据结 ...

  3. 栈 -- 顺序栈、链式栈的实现 及其应用(函数栈,表达式求值,括号匹配)

    文章目录 实现 顺序栈实现 链式栈实现 应用 函数栈 的应用 表达式求值中 的应用 括号匹配中 的应用 我们使用浏览器的时候经常会用到前进.后退功能. 依次访问完一串页面 a – b – c之后点击后 ...

  4. P1944 最长括号匹配(栈模拟/DP)

    P1944 最长括号匹配 可以直接用栈模拟,把匹配好的标记一下, 最后找到最长的匹配输出即可. 如果是要求最长的长度的题那么只需要求数就行了,没必要把原序列真的按照题意改变 如果要求序列,那么只需要按 ...

  5. 2.2栈的另一个应用:括号匹配

    2.2栈的另一个应用:括号匹配 1.LeetCode官网 美网:https://leetcode.com/ 中文网 :https://leetcode-cn.com/ 英语不咋地,所以选择此处选择中文 ...

  6. python 栈_Python数据结构与算法05:基本结构:栈的应用之括号匹配

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 算法流程 括号匹配情况介绍 我们经常会遇到类似(9-1)*(8+7)/(4-2).print(& ...

  7. java 括号匹配_java---括号匹配

    import java.util.HashMap; import java.util.LinkedList; import java.util.Map; /* *括号匹配 * 1.用栈实现,如果读取字 ...

  8. (转载)vim括号匹配等跳转技巧

    转载于:https://blog.csdn.net/u013408061/article/details/77523318 vim 括号匹配跳转操作: % 跳转到相配对的括号 gD 跳转到局部变量的定 ...

  9. CCF NOI1113 括号匹配

    问题链接:CCF NOI1113 括号匹配. 时间限制: 1000 ms  空间限制: 262144 KB 题目描述 给定一个只包含左右括号的合法括号序列,按右括号从左到右的顺序输出每一对配对的括号出 ...

  10. hdu4915 判断括号匹配

    题意:       问你括号匹配是否唯一,三种字符'(','?',')',问号可以变成任何字符. 思路:       首先我们要学会判断当前串是否成立?怎么判断?我的方法是跑两遍,开三个变变量 s1 ...

最新文章

  1. 天数换算月份_Js 计算指定月份的天数
  2. easy connect 获取服务端配置信息失败_安装配置mysql
  3. 读《白帽子讲Web安全》之客户端脚本安全(一)
  4. TZOJ 5471: 数据结构实验--图的最小代价生成树
  5. python语言易错知识点强化
  6. git 32位_完整的GIT笔记 快速上手小白教程
  7. 美团刚做起网约车,滴滴就送外卖?你们倒真是相爱相杀
  8. 个人源码管理,SVN本地化
  9. 小程序素材抓取软件_小程序上新丨2020冬季产品图库更新,海量素材随你用!...
  10. (附源码)php希尔顿酒店管理系统 毕业设计 041148
  11. CVE-2017-8464 震网三代
  12. google 搜索语法总结
  13. Python查询订单获取订单详情
  14. IE主页被篡改的修复方法
  15. 信用卡评分模型(R语言)
  16. 第6周作业3-Fibonacci数列(网络131黄宇倩)
  17. ssh_exchange_identification read Connection reset by peer
  18. css实现鼠标悬停效果
  19. 8 种方案机智应对后端一次性返回 10万 条数据
  20. The purpose of a tem

热门文章

  1. 浅析:如何转行做产品经理?
  2. Allegro转PADS格式
  3. vlc android demo,使用VLC-Android寫一個簡單的電視直播demo
  4. Eclipse进行断点调试程序
  5. php模拟referer,php HTTP_REFERER模仿代码
  6. liftoff下载大疆FPV DLC
  7. 展讯平台-sensor驱动
  8. MacOS Mojave 摄像头和麦克风权限
  9. 重装系统教程(版本一)
  10. wxpython选择框_wxpython 对话框