1355:字串匹配問題(strs)
阿新 • • 發佈:2021-11-21
【題目描述】
字串中只含有括號(),[],<>,{}
,判斷輸入的字串中括號是否匹配。如果括號有互相包含的形式,從內到外必須是<>,(),[],{}
,例如。輸入:[()]
輸出:YES
,而輸入([]),([)]
都應該輸出NO
。
【輸入】
第一行為一個整數nn,表示以下有多少個由括好組成的字串。接下來的nn行,每行都是一個由括號組成的長度不超過255255的字串。
【輸出】
在輸出檔案中有nn行,每行都是YES
或NO
。
【輸入樣例】
5 {}{}<><>()()[][] {{}}{{}}<<>><<>>(())(())[[]][[]] {{}}{{}}<<>><<>>(())(())[[]][[]] {<>}{[]}<<<>><<>>>((<>))(())[[(<>)]][[]] ><}{{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
【輸出樣例】
YES YES YES YES NO
#include <iostream> using namespace std; const int N = 255; char a[N] = {0}; int main() { int n; cin >> n; char ch = cin.get();//return char //cout<<n<<":"<<ch<<endl; for (int i = 0; i < n; i++) { int jian, xiao, zhong, da, top, cnt; for (ch = jian = xiao = zhong = da = top = cnt = 0; ch != '@' && cnt < N; cnt++) {//從內到外必須是<>,(),[],{} //cin>>ch;//none space ch = cin.get(); //cout<<ch; switch (ch) { case '<': a[top++] = ch; jian++; break; case '>': jian--; //尖括號 if (a[--top] != '<') { //cout<<">:"<<a[top]<<endl; cin >> a; //remove a line ch = cin.get();//return char ch = '@'; } break; case '(': a[top++] = ch; xiao++; break; case ')': xiao--; //小括號 if (a[--top] != '(' || jian != 0) { //cout<<"):"<<a[top]<<endl; cin >> a; //remove a line ch = cin.get();//return char ch = '@'; } break; case '[': a[top++] = ch; zhong++; break; case ']': zhong--; //中括號 if (a[--top] != '[' || jian != 0 || xiao != 0) { //cout<<"]:"<<a[top]<<endl; cin >> a; //remove a line ch = cin.get();//return char ch = '@'; } break; case '{': a[top++] = ch; da++; break; case '}': da--; //大括號 if (a[--top] != '{' || jian != 0 || xiao != 0 || zhong != 0) { //cout<<"}:"<<a[top]<<endl; cin >> a; //remove a line ch = cin.get();//return char ch = '@'; } break; case '@': default: //cout<<"@:"<<ch<<endl; ch = '@'; break; } } //cout<<i<<":"<<ch<<endl; if (jian == 0 && xiao == 0 && zhong == 0 && da == 0) { cout << "YES" << endl; } else { cout << "NO" << endl; } } return 0; }