1 条题解
-
1
这道题不算很难。
方法一:
我们只要遇到左括号,就将其入栈,遇到右括号,就判断栈是否为空,如果是空的,布尔变量变成false,如果不是空的,我们就判断栈顶是否是左括号,如果是左括号,就出栈,保持不变,否则变成false。
代码如下:
#include<iostream> #include<stack> using namespace std; char ch; stack<char>stk; bool flag=true; int main() { while(cin>>ch&&ch!='@') { if(ch=='(')stk.push('('); else if(ch==')') { if(stk.empty())flag=false; else { if(stk.top()=='(')stk.pop(); else flag=false; } } } if(flag&&stk.empty())cout<<"YES"; else cout<<"NO"; return 0; }
方法二:
和上面的做法类似,但是我们把换成了,只要有右括号没有匹配的左括号,就加一,最后只需要判断是否为0就行了。
代码如下:
#include<iostream> #include<stack> using namespace std; char ch; stack<char>stk; int cnt; int main() { while(cin>>ch&&ch!='@') { if(ch=='(')stk.push('('); else if(ch==')') { if(stk.empty())cnt++; else { if(stk.top()=='(')stk.pop(); else cnt++; } } } if(!cnt&&stk.empty())cout<<"YES"; else cout<<"NO"; return 0; }
信息
- ID
- 48
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 33
- 已通过
- 9
- 上传者