04:括号匹配
总时间限制:
1000ms
内存限制:
65536kB
描述
给定一个字符串,字符串只包含两种字符:左括号“(”和右括号”)”。请判断这些括号是否能匹配。如果能则输出Yes,不能则输出No。
输入
一行,括号序列(一个字符串)
输出
Yes/No
样例输入
((()))()()
样例输出
Yes
#include<iostream>
#include<string>
const int StackSize = 1000;
using namespace std;
template<typename T>
class Seqstack
{
public:
Seqstack();
~Seqstack()
{
}
void Push(T x);
T Pop();
T GetTop();
int empty();
private:
T data[StackSize];
int top;
};
int main()
{
string s;
Seqstack<char> Seq1;
Seqstack<char> Seq2;
cin >> s;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == '(')
{
Seq1.Push('(');
}
else
{
Seq2.Push(')');
}
}
if (Seq1.empty() || Seq2.empty())
{
cout << "No" << endl;
return 0;
}
while (true)
{
Seq1.Pop();
Seq2.Pop();
if (Seq1.empty() || Seq2.empty())
{
break;
}
}
if (Seq1.empty() && Seq2.empty())
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
return 0;
}
template<typename T>
Seqstack<T>::Seqstack()
{
top = -1;
}
template<typename T>
void Seqstack<T>::Push(T x)
{
if (top == StackSize - 1)
{
return;
//cout << "上溢" << endl;
}
data[++top] = x;
}
template<typename T>
T Seqstack<T>::Pop()
{
T x;
if (top == -1)
{
return -1;
//cout << "下溢" << endl;
}
x = data[top--];
return x;
}
template<typename T>
T Seqstack<T>::GetTop()
{
return data[top];
}
template<typename T>
int Seqstack<T>::empty()
{
if (top == -1)
{
return true;
}
else
{
return false;
}
}