题目描述
给你一个字符串,里面只有两种字符"("和")"。问是否所有"("都有一个")"与之匹配。
输入描述
第一行一个数字T (0<T<=100),表示T组测试数据。
随后T组测试数据,每组测试数据一个字符串str。(0 <= strlen(str) <= 10000)
输出描述
对于每组测试数据,如果字符串中所有"("都有一个")"与之匹配,则输出"yes", 否则输出"no"
Sample Input
2
(())
)(
Sample Output
yes
no
通过栈操作:
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
bool func(char str[])
{
char temp;
stack<char>s;
for (int i=0;i<strlen(str);i++)
{
//如果为左括号入栈
if (str[i]=='(')
s.push(str[i]);
else
{
if (s.empty())
return false;
if (s.top()=='('&&str[i]==')')
s.pop();
else
return false;
}
}
//如果栈空说明没有括号剩余
if (s.empty())
return true;
return false;
}
int main(void)
{
int n;
cin>>n;
char str[10001];
while(n--)
{
cin>>str;
if(func(str))
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
}
return 0;
}
count计数:
#include<iostream>
#include<cstring>
using namespace std;
bool judge(char str[])
{
int count=0;
for(int i=0;i<strlen(str);i++)
{
if(str[i]=='(')
{
count++;
}
else
{
count--;
}
if(count<0)
return false;
}
if(count==0)
return true;
else
return false;
}
int main(void)
{
int n,count=0,flag=0;
cin>>n;
while(n--)
{
char str[10001];
cin>>str;
if(judge(str))
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
}
return 0;
}