解题思路:
将字符用数字来代替
注意事项:

参考代码:

#include<bits/stdc++.h>

using namespace std;

//定义字符数组 和 数字数组 

// 数字的优先级为0,1,2,3,4.......从小到大 

char a[]={'{','[','(','<','}',']',')','>'};

int b[266];

int main()

{

int n;

cin >> n; 

while(n--)

{

//这东西记得在while循环里面写 

int flag = 1;//标记 

string s;

stack<int>q;

cin >> s;

for(int i = 0 ; i < s.size() ;i++)

{

//分别与字符数组对比 如果成功 则将相应的数字存放到数字数组里面 

for(int j = 0 ; j < 8 ;j++)

{

if(s[i] == a[j])

{

b[i] = j;

break;

}

}

}

for(int i = 0 ; i < s.size() ;i++)

{

// <= 3 这个是让前四个 即左半边的能够进入下一步 

if(b[i] <= 3)

{

// 下面是 如果栈为空 或者前面的数字比后面的小于或者等于 

if(q.empty() || q.top() <= b[i]) q.push(b[i]);

// 如果该栈不为空 并且后面呢个比前面这个小 

//则不满足大括号包含小括号的规则 标记 退出循环 

else

{

flag = 0;

break;

}

}

else 

{

// 这个为后四个字符 及括号的右半边 

// b[i] - 4 这个判断是否和栈顶元素匹配 

// 不匹配则退出循环 否则栈顶元素出栈                      

if(!q.empty() && b[i] - 4 == q.top())

q.pop();

else 

{

flag = 0;

break;

}

}

}

//就是一些简单的判断条件 

if(!q.empty()) cout << "NO" << endl;

else if(flag) cout << "YES" << endl;

else cout << "NO" << endl;

return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论