題意就是輸入一行包含()和[]的字符串秘案,檢查每對括號是否匹配得上,能就Yes否則No潦匈。
然而題目好坑啊根本沒說輸入字符串里會含有空格阱高,所以一開始用cin讀取string總是蜜汁WA,調(diào)試了很久才發(fā)現(xiàn)得用getline茬缩,而且要注意一開始用cin讀取一個整數(shù)n后赤惊,換行符會被cin忽略從而留在輸入緩沖區(qū)里,下面getline碰到換行符就直接結(jié)束不讀了凰锡,相當于多了一個空串未舟。所以在cin完整數(shù)n后要再加一句getchar讀取剩下的換行符。
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main() {
int n;
cin >> n;
getchar();
for (int i = 0; i < n; i++) {
string str;
getline(cin, str);
stack<char> s;
for (int j = 0; j < str.length(); j++) {
// 只有括號匹配的情況下才出棧
if (str[j] == ')' && !s.empty() && s.top() == '(') {
s.pop();
}
else if (str[j] == ']' && !s.empty() && s.top() == '[') {
s.pop();
}
// 其余情況全部入棧
else {
s.push(str[j]);
}
}
// 如果所有的括號都匹配的話掂为,椩0颍肯定是空的
if (s.empty())
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}