題目鏈接: 點我跳轉
題目大意: 給定一個字符串,判斷其中的左右括號是否配對
題目分析: 洛谷歸類在線性結構裏面,應該是用棧,那麼我們遇到左括號,就在棧裏面放一個1,遇到右括號就取出一個1來,如果結束的時候還有1在裏面,就是配對成功,沒空就是失敗。如果在讀取的過程中棧空了又遇到了右括號,那也說明配對失敗。但是我們好像只用到了棧的大小,所以用一個數字來表示棧的大小就OK了。
用棧寫的代碼
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
using namespace std;
int main(){
char x;
int t;
stack<int> stk;
while(1){
cin>>x;
if(x == '@'){
if(stk.empty())printf("YES");
else printf("NO");
break;
}
t = (x == '(')-(x == ')');//左括號爲1,右括號爲-1,其他字符爲0
if(t == 1)stk.push(1);//隨便放進去一個數字好了反正不重要
else if(t == -1){
if(stk.empty()){
printf("NO");
break;
}
stk.pop();
}
}
return 0;
}
這是不用棧的版本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
char x;
int t,stk(0);
while(1){
cin>>x;
if(x == '@'){
if(!stk)printf("YES");
else printf("NO");
break;
}
t = (x == '(')-(x == ')');
if(t == 1)stk++;
else if(t == -1){
if(!stk){
printf("NO");
break;
}
stk--;
}
}
return 0;
}