NKOJ——P3725——[基础]合法括号序列

时间限制 : 5000 MS 空间限制 : 131072 KB 评测说明 : 1s,128MB

  • 原题
    • 问题描述
    • 输入格式
    • 输出格式
    • 样例
      • 样例 1
        • 样例输入 1
        • 样例输出 1
      • 样例 2
        • 样例输入 2
        • 样例输出 2
      • 样例 3
        • 样例输入 3
        • 样例输出 3
  • 题解

原题

问题描述

给一个只包含()[]{}<>的字符串,判断它是否是一个合法的括号序列。

输入格式

输入一个长度不超过 1 0 6 10^6 106的字符串,只包含 ()[]{}<>这些字符。

输出格式

如果是合法括号序列,输出Yes,否则输出yES。

样例

样例 1

样例输入 1

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

样例输出 1

Yes

样例 2

样例输入 2

([{<

样例输出 2

yES

样例 3

样例输入 3

)

样例输出 3

yES

题解

众所周知,用栈扫描。
我建立了一个函数叫_(我也想不到神马好名字了)
然后用它判断匹不匹配。
先读入:

	cin>>f;

无论如何,第一个进栈:

	e[top++]=f[0];

判断:

	for(ll i=1;f[i]!='\0';i++)
		if(_(f[i])==e[top-1])
			if(top>0)
				top--;
			else
			{
				cout<<"yES";
				return 0;
			}
		else
			e[top++]=f[i];

只要不符合,就立马弹出(见代码5~9行)。
最后检查有没有遗留,输出:

	if(top==0)
		cout<<"Yes";
	else
		cout<<"yES";
	return 0;

搞定!
Accepted (100.00000000000098)
代码见链接。
完结撒花!

你可能感兴趣的:(NKOJ——P3725——[基础]合法括号序列)