文章

1

粉丝

225

获赞

3

访问

7.5k

头像
很明显用栈,但是小菜鸡使用不熟练用的switch实现
推荐阅读
P1067 中山大学2019年机试题
发布于2021年8月2日 18:44
阅读数 7.5k

该方法比较好理解:

// 题意描述: 在算术表达式中,除了加、减、乘、除等运算外,往往还有括号。
// 包括有大括号{},中括号[],小括号(),尖括号<>等。 对于每一对括号,必须先左边括号,然后右边括号;
// 如果有多个括号,则每种类型的左括号和右括号的个数必须相等;对于多重括号的情形,按运算规则,
// 从外到内的括号嵌套顺序为:大括号->中括号->小括号->尖括号。
// 例如,{[()]},{()},{{}}为一个合法的表达式,而([{}]),{([])},[{<>}]都是非法的。
#include<bits/stdc++.h>
using namespace std;

void match(string s)
{
    int n = s.length();
    if(n%2!=0)
    {
        cout << "NO"<<endl;
        return;
    }
    int a[4] = {0};//0-< 1-( 2-[ 3-{
    int b[4] = {0};//0-> 1-) 2-] 3-}
    for(int i = 0; i < n; i++)
    {
        switch (s[i])
        {
        case '<':
            a[0]++;
            break;
        case '(':
            a[1]++;
            break;
        case '[':
            a[2]++;
            break;
        case '{':
            a[3]++;
            break;
        case '>':
            if(a[0]==0)
            {
                cout << "NO"<<endl;
           ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发