UVA 673 - Parentheses Balance
題目:
在本題中,題目會先給你一個包含小括號()及中括號〔〕的字串。當字串符合下列條件時我們稱他為正確的運算式:
該字串為一個空字串
如果A和B都為正確的運算式,則AB也為正確的運算式,
如果A為正確的運算式,則(A)及〔A〕都為正確的運算式。
現在,請你寫一支程式可以讀入這類字串並檢查它們是否為正確的運算式。字串的最大長度為128個字元。
Input
輸入的第一列為正整數n,代表接下來有n列待測資料。
Output
檢查每列待測資料,如果正確輸出Yes,否則輸出No。
Sample Input #1
3
([])
(([()])))
([()])()
Sample Output #1
Yes
No
Yes
C++ code:
#include <bits/stdc++.h>
using namespace std;
int check(string s) {
int str[128];
int c = -1;
for (int i = 0; s[i] != '\0'; ++i) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
str[++c] = s[i];
}
else if (s[i] == ')' || s[i] == ']' || s[i] == '}') {
if (c == -1) {
return 0;
}
if ((s[i] == ')' && str[c] == '(') || (s[i] == ']' && str[c] == '[') || (s[i] == '}' && str[c] == '{')) {
c--;
}
else {
return 0;
}
}
}
return c == -1;
}
int main () {
int t;
cin >> t;
cin.ignore();
string n;
for (int i = 0; i < t; ++i) {
getline(cin, n);
if (check(n)) {
cout << "Yes" << endl;
}
else {
cout << "No" << endl;
}
}
return 0;
}