表达式括号匹配题解
2024-07-18 16:14:31
发布于:浙江
8阅读
0回复
0点赞
不要暴力破解!复杂度太高,用栈,复杂度只有o(n)。
先新建栈,再建一个字符型变量,(不用字符串可以用一个变量一个个输入)在输入时如有“(”记作1压入栈内,在输入时如有“)”就比较栈顶元素是否为1,如是,删除栈顶元素(指针下移)如不是,输出“NO”如果遇到“@”退出循环,最后检查栈是否为空,如空,输出“YES”如还有元素,输出“NO”。
具体代码如下:
#include <bits/stdc++.h>
using namespace std;
int top,a[1005];
char s;
int main(){
for(;1;){
cin>>s;
if(s=='('){
top++;
a[top]=1;
}
if(s==')'){
if(a[top]==1){
top--;
}
else{
cout<<"NO";
return 0;
}
}
if(s=='@'){
break;
}
}
if(top==0){
cout<<"YES";
}
else{
cout<<"NO";
}
return 0;
}
求小赞一个。
这里空空如也
有帮助,赞一个