解题思路:
将字符用数字来代替
注意事项:
参考代码:
#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 人评分
1009题解浏览:802 |
出圈】指针malloc版浏览:377 |
DNA (C语言代码)浏览:837 |
Tom数 (C语言代码)浏览:598 |
图形输出 (C语言代码)浏览:1019 |
1197求助浏览:667 |
A+B for Input-Output Practice (I) (C语言代码)浏览:451 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:607 |
拆分位数 (C语言代码)浏览:464 |
1074(纳闷了,答案错误,求指教)浏览:384 |