题目链接:https://vjudge.net/problem/UVA-673
这道题并不难解, 用一个栈保存,只要遇到 '(' 和 '[' 入栈,然后遇到 ']' ')' 匹配便出栈,若最后栈不空则未空
但这题有个很严重的问题,需要判断空行,一开始笔者用了scanf("%s", s) 一直在wa,后来发现必须用fgets(),并且注意在fgets前用一个getchar读取第一个数字前的
回车
代码
#include <cstdio> #include <iostream> #include <iomanip> #include <algorithm> #include <bitset> #include <queue> #include <memory.h> #include <map> #include <cmath> #include <stack> #include <string> #include <cstring> #include <cassert> #define ll long long using namespace std; const int MAX = 10010; bool isCorrect(const char *s){ int len = strlen(s)-1; stack <char> sta; for(int i = 0; i < len; i++){ char c = s[i]; if(c == '[' || c == '(') sta.push(c); else{ if(sta.empty()) return false; char x = sta.top(); if(c == ')'){ if(x == '(') sta.pop(); else break; } else if(c == ']'){ if(x == '[') sta.pop(); else break; } } } return sta.empty(); } int main(){ int T; char s[MAX]; scanf("%lld", &T); getchar(); while(fgets(s, sizeof(s), stdin) != NULL){ // if(strlen(s) == 0) puts("Yes"); if(isCorrect(s)) puts("Yes"); else puts("No"); } }