解题思路:
将字符用数字来代替
注意事项:
参考代码:
#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复