1、链接
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1054
2、题目
Description
There are six kinds of brackets: ‘(‘, ‘)’, ‘[‘, ‘]’, ‘{’, ‘}’. dccmx’s girl friend is now learning java programming language, and got mad with brackets! Now give you a string of brackets. Is it valid? For example: “(([{}]))” is valid, but “([)]” is not.
Input
First line contains an integer T (T<=10): the number of test case.
Next T lines, each contains a string: the input expression consists of brackets.
The length of a string is between 1 and 100.
Output
For each test case, output “Valid” in one line if the expression is valid, or “Invalid” if not.
Sample Input
2
{{[[(())]]}}
({[}])
Sample Output
Valid
Invalid
3、分析
遇到左括号类就入栈,当遇到右括号类判断其与栈顶元素是否匹配即可
4、代码
#include<bits/stdc++.h> using namespace std; char a[105]; int main() { int t; scanf("%d",&t); while(t--) { scanf("%s",&a); stack<char>st; int len = strlen(a); int flag = 0; for(int i = 0; i < len ; i++) { if(a[i] == '(' || a[i] == '[' || a[i] == '{') st.push(a[i]); else if(a[i] == ')') { if(!st.empty() && st.top() == '(') { flag = 1; st.pop(); } else{ flag = 0; break; } } else if(a[i] == ']') { if(!st.empty() && st.top() == '[') { flag = 1; st.pop(); } else{ flag = 0; break; } } else if(a[i] == '}') { if(!st.empty() && st.top() == '{') { flag = 1; st.pop(); } else{ flag = 0; break; } } } if(flag && st.empty()) printf("Valid\n"); else printf("Invalid\n"); } return 0; }