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 }

     

  • 相关阅读:
    Linux下的/dev/sr0、/dev/cdrom、df命令、free命令
    CentOS6.8 yum升级高版本gcc
    php5.6配置oracle数据库扩展 oci8(windows7系统64位)
    linux命令之ifconfig
    linux 编译安装swoole
    Bootstrap面包屑导航
    bootstrap滚动监听
    bootstrap弹出框
    Bootstrap 模态框(也可以说的弹出层)
    java反射拼接方法名动态执行方法
  • 原文地址:https://www.cnblogs.com/Alan-Anders/p/10164797.html
Copyright © 2011-2022 走看看