Try   HackMD

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; }