xtu p1195 字符串匹配问题

描述

字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配。如果括号有互相包含的形式,从内到外必须是<>,(),[],{},例如。输入: [()] 输出:YES,而输入([]),([)]都应该输出NO。
格式
输入格式

第一行为一个整数n,表示以下有多少个由括好组成的字符串。接下来的n行,每行都是一个由括号组成的长度不超过255的字符串。
输出格式
在输出文件中有n行,每行都是YES或NO。
样例
输入样例

5
{}{}<><>()()[][]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{<>}{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]

<}{{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]

输出样例

YES
YES
YES
YES
NO

限制
时间限制: 1000 ms
内存限制: 65536 KB

int main(){
	map<char,int> mp;
	int n,a[257]={0};
	mp['{']=0,mp['[']=1,mp['(']=2,mp['<']=3;
	mp['}']=4,mp[']']=5,mp[')']=6,mp['>']=7;
	cin>>n;
	while (n--){
		string s;
		stack<int> st;
		cin>>s;
		int len=s.size();
		bool flag = true;	
		for (int i=0; i<len; i++)
			a[i]=mp[s[i]];	//建立映射
		for (int i=0; i<len; i++)
			if (a[i]<=3){	//左括号
				if (st.empty() || a[i]>=st.top()) st.push(a[i]);	//入栈
				else { flag=false; break; }
			}
			else {
				if (!st.empty() && st.top()+4==a[i]) st.pop();	//出栈
				else { flag=false; break; }
			}
		if (flag&&st.empty()) cout<<"YES\n";
		else cout<<"NO\n";
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值