1. 程式人生 > >7-10 括號匹配(25 分) 【STL】

7-10 括號匹配(25 分) 【STL】

7-10 括號匹配(25 分)

給定一串字元,不超過100個字元,可能包括括號、數字、字母、標點符號、空格,程式設計檢查這一串字元中的( ) ,[ ],{ }是否匹配。
輸入格式:

輸入在一行中給出一行字串,不超過100個字元,可能包括括號、數字、字母、標點符號、空格。
輸出格式:

如果括號配對,輸出yes,否則輸出no。
輸入樣例1:

sin(10+20)

輸出樣例1:

yes

輸入樣例2:

{[}]

輸出樣例2:

no

思路

用棧模擬 如果碰到是 左括號 就入棧
然後碰到 右括號 要判斷 棧是不是空 如果空 就是不合法的

如果棧不空 那就要判斷 棧頂 是不是對應的 左括號 如果不是 就不合法

AC程式碼

#include <cstdio>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <deque>
#include <vector>
#include <queue>
#include <string> #include <map> #include <stack> #include <set> #include <numeric> #include <sstream> #include <iomanip> #include <limits> #define CLR(a) memset(a, 0, sizeof(a)) #define pb push_back using namespace std; typedef long long ll; typedef
long double ld; typedef unsigned long long ull; typedef pair <int, int> pii; typedef pair <ll, ll> pll; typedef pair<string, int> psi; typedef pair<string, string> pss; const double PI = 3.14159265358979323846264338327; const double E = exp(1); const double eps = 1e-30; const int INF = 0x3f3f3f3f; const int maxn = 2e2 + 5; const int MOD = 1e9 + 7; int main() { string s; getline(cin, s); int len = s.size(); map <char, char> m; m['('] = ')'; m['['] = ']'; m['{'] = '}'; stack <char> vis; int flag = 1; for (int i = 0; i < len; i++) { if (s[i] == '(' || s[i] == '[' || s[i] == '{') vis.push(s[i]); else if (s[i] == ')' || s[i] == ']' || s[i] == '}') { if (vis.size() && m[vis.top()] == s[i]) vis.pop(); else { flag = 0; break; } } } if (flag && vis.size() == 0) printf("yes\n"); else printf("no\n"); }