[Offer收割]程式設計練習賽84 -- 括號序列
阿新 • • 發佈:2018-11-26
時間限制:10000ms
單點時限:1000ms
記憶體限制:256MB
描述
給定一個只包含'(', ')'和''的字串S,現在小Hi可以任意指定''為'('或')',不同的'*'可以是不同的字元。
請你判斷小Hi是否可能得到一個合法匹配的字串。
輸入
第一行包含一個整數T,代表資料的組數。
以下N行每行一個字串S。
1 ≤ T ≤ 10 1 ≤ |S| ≤ 1000
輸出
對於每組資料,輸出YES或者NO代表是否能得到一個合法匹配的字串。
樣例輸入
2
*
(*)*
樣例輸出
NO
YES
題解
把“*”先全部看成“(”或“)”
然後用 l 記錄把 “*”看成“)”後“(”未配對的數目
用 r 記錄把 “*”看成“(”後“)”未配對的數目
#include <iostream> #include <algorithm> #include <string.h> #include <stdio.h> using namespace std; #define ll long long char str[1005]; int main(int argc, char const *argv[]) { int T, n; scanf("%d", &T); while (T--) { scanf("%s", str); n = strlen(str); int l, r; l = r = 0; for (int j = 0; j < n; j++) { if (str[j] == '(') l++, r++; else if (str[j] == ')') l--, r--; else l--, r++; // 星號,)則l--, (則r++ if (l < 0) l += 2; if (r < 0) break; } if (l == 0) puts("YES"); else puts("NO"); } return 0; }