字符串匹配问题
【问题描述】
字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配。如果括号有互相包含的形式,从内到外必须是<>,(),[],{},例如。输入: [()] 输出:YES,而输入([]), ([])都应该输出NO。
【输入格式】strs.in
文件的第一行为一个整数n,表示以下有多少个由括好组成的字符串。接下来的n行,每行都是一个由括号组成的长度不超过255的字符串。
【输出格式】strs.out
在输出文件中有N行,每行都是YES或NO。
【输入样例】
5
{}{}<><>()()[][]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{<>}{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
><}{{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
【输出标例】
YES
YES
YES
YES
NO
错误代码典例made by 吴成志
#include<stack> #include<string> #include<iostream> using namespace std; string s; stack<int>str; int main() { int su=9; cin>>s; for(int i=0;i<s.size();++i) { if(s[i]=='(')str.push(2); if(s[i]=='[')str.push(3); if(s[i]=='<')str.push(1); if(s[i]=='{')str.push(4); if(s[i]==')'||s[i]==']'||s[i]=='>'||s[i]=='}') if(str.empty()) { su=9; str.pop(); } if(str.empty()>1) if(str.top()>su) { cout<<"NO"; return 0; } su=str.top(); } if(str.empty())cout<<"NO"; else cout<<"OK"; return 0; }