描述
给定一个字符串,字符串只包含两种字符:左括号“(”和右括号”)”。请判断这些括号是否能匹配。如果能则输出Yes,不能则输出No。
输入
一行,括号序列(一个字符串)
输出
Yes/No
样例输入
((()))()()
样例输出
Yes
AC代码:
基于很水的样例的计数
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
//char a[100010],b[100010];
int main()
{
string n;
cin>>n;
int l=0,r=0;
for(int i=0;i<n.size();i++)
{
if(n[i]=='(')
{
//a[l]=n[i];
l++;
}
if(n[i]==')')
{
//b[r]=n[i];
r++;
}
}
//cout<<l<<" "<<r<<endl;
if(l!=r)
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
}
帮别人改的链栈实现
#include<iostream>
#include<stack>
using namespace std;
template <typename T>
struct Node
{
T data;
Node <T> *next;
};
template <typename T>
class LinkStack
{
private:
Node<T> *top;
public:
LinkStack();
void push(T x);
int pop();
void empty();
//~LinkStack();
};
template <typename T>
LinkStack<T>::LinkStack()
{
top=NULL;
}
template <typename T>
void LinkStack<T>::push(T x)
{
Node<T> *s;
s=new Node<T>;
s->data=x;
if(top!=NULL)
{
s->next=top;
top=s;
}
else
{
top=s;
s->next=NULL;
}
}
template <typename T>
int LinkStack<T>::pop()
{
Node<T> *p;
if(top==NULL)
{
cout<<"No"<<endl;
return 0;
}
p=top;
top=top->next;
delete p;
return 1;
}
template <typename T>
void LinkStack<T> ::empty()
{
if(top==NULL)
cout<<"Yes";
else
cout<<"No";
}
int main()
{
string x;
LinkStack<char> ob;
cin>>x;
for(int i=0;i<x.size();i++)
{
if(x[i]=='(')
ob.push(x[i]);
if(x[i]==')')
{
if(ob.pop())
continue;
else
return 0;
}
}
ob.empty();
}