竞赛
考级
法兰西玫瑰
思路: 题目要求判断一个表达式的前后括号是否匹配。 1. 设置栈,记录前括号的数量 2. 将表达式的每个字符依序输入直到输入的为@退出 3. 如果输入的是(则入栈 4. 如果输入的是),栈为空说明没有前括号,不匹配,直接输出NO,否则出栈 5. 直到输入结束,如果栈为空说明表达式匹配,否则不匹配 代码:
CK七星松|再发团队邀请建议趋势
浅夏.山橘月
检查输入的表达式中的左右圆括号是否匹配。
AC君
SJZ
代码呈现 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 思路分析 输入字符串,遍历 如果它是左括号,进栈 如果它是右括号: 1.栈头为左括号,左括号出栈 2.栈头没有(栈空了),标志变量增加,退出循环 3.栈头不是左括号,标志变量增加,退出循环 遍历结束后,如果栈还有(即括号还未配对完),标志变量增加 如果标志变量为0,输出YES,否则输出NO
沈思邈
直接暴力
亚洲卷王 AK IOI
潮水。
题解如下 欢迎加入团队
唱跳坤
不要暴力破解!复杂度太高,用栈,复杂度只有o(n)。 先新建栈,再建一个字符型变量,(不用字符串可以用一个变量一个个输入)在输入时如有“(”记作1压入栈内,在输入时如有“)”就比较栈顶元素是否为1,如是,删除栈顶元素(指针下移)如不是,输出“NO”如果遇到“@”退出循环,最后检查栈是否为空,如空,输出“YES”如还有元素,输出“NO”。 具体代码如下: 求小赞一个。
ddxdd
这道题其实很简单,我们甚至不用栈。
题库管理员
嫌疑を避ける ~~
yy
#include<iostream> using namespace std; int main(){ string a; int i = 0,top = 0,tmp = 0; cin >> a; while(a[i] != '@'){ if(a[i] == '(')top++; if(a[i] == ')')top--; if(top < 0)tmp = 1; i++; } if(top != 0)tmp = 1; if(tmp == 0)cout << "YES"; else cout << "NO"; return 0; }
dfs却一场空
#include <bits/stdc++.h> using namespace std; stack<char> s; int main(){ char a; bool q=true,h=true; while(cin>>a) { s.push(a); if(a=='(') { if(qtrue) q=false,h=true; else { cout<<"NO"<<endl; return 0; } } else if(a')') { if(htrue) h=false,q=true; else { cout<<"NO"<<endl; return 0; } } } if(hfalse&&q==true) cout<<"YES"<<endl; else cout<<"NO"<<endl; return 0; }
Voldemort
Alex
zhouty
Zด้้้้้็้้้้้้้็
#include<bits/stdc++.h> using namespace std; int main(){ string s; cin>>s; int n=0; for(int i=0;i<s.size();i){ if(s[i]=='(') n; if(s[i]')'){ if(n) n--; else{ cout<<"NO"; return 0; } } } if(n0) cout<<"YES"; else cout<<"NO"; }
一只有梦想的咸鱼
共28条