zoukankan      html  css  js  c++  java
  • 【栈】1353:表达式括号匹配(stack)

    【题目描述】

    假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。

    【输入】

    一行数据,即表达式。

    【输出】

    一行,即“YES” 或“NO”。

    【输入样例】

    2*(x+y)/(1-x)@
    【输出样例】

    YES
    【提示】

    【样例输入2】

    (25+x)*(a*(a+b+b)@

    【样例输出2】

    NO
    【我的思路】

    这道题,一本通上的所有数据都没有出现括号顺序错误。所以,只需要左括号和右括号数量相等就可以了。

    【方法一】直接循环【代码如下】

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 char a[260];
     4 int main()
     5 {
     6     int i=0,k=0,len;
     7     gets(a);
     8     len=strlen(a)-1;
     9     for(i=0;i<=len;i++)
    10     {
    11         if(a[i]=='(')
    12             k++;
    13         if(a[i]==')')
    14             k--;
    15     }
    16     if(k==0)
    17         cout<<"YES";
    18     else
    19         cout<<"NO";
    20     return 0;
    21 }

    【方法二】用模拟栈来解决【代码如下】

     1 #include<iostream>
     2 #include<cstring>
     3 #include<string>
     4 #include<cstdio>
     5 using namespace std;
     6 char a[10010];
     7 int i=0,top=0;
     8 int main()
     9 {
    10     gets(a);
    11     int len=strlen(a);
    12     for (i=0; i<len; i++){
    13         if(a[i]=='('){
    14             top++;
    15         }
    16         if(a[i]==')'){
    17             if(top>0)top--;
    18             else return 0;
    19         }
    20         i++;
    21     }
    22     if(top!=0)cout<<"NO";
    23     else cout<<"YES";
    24     return 0;
    25 }

     

  • 相关阅读:
    Binding to a Service
    UML类图几种关系的总结
    阿里云调试
    Serif和Sans-serif字体的区别
    从Log4j迁移到LogBack的理由
    logback
    java 解析json格式数据(转)
    开源Web测试工具介绍
    GET乱码以及POST乱码的解决方法
    单元测试框架TestNg使用总结
  • 原文地址:https://www.cnblogs.com/Alan-Anders/p/10164797.html
Copyright © 2011-2022 走看看