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

mac2022-06-30  26

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

转载于:https://www.cnblogs.com/Dup4/p/9433194.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)