算法评价

asyuae 2012-09-26 09:44:46

#include<iostream>
#include<string>
#include<map>
using namespace std;

int main(){
string b;
int m;
cin>>m;
for(int i=0 ; i!=m ; i++ ){
cin>>b;
bool pipei(string &,int,int );
if(pipei(b,0,b.size()-1 ))
printf("Yes\n");
else
printf("No\n");
}

return 0;
}
bool pipei(string & b,int h,int t ){
map<char,int> k;
k['[']=0;
k[']']=0;
k['(']=0;
k[')']=0;
map<char,int> p;
p['[']=']';
p[']']='[';
p['(']=')';
p[')']='(';
if(t==h+1 && p[b[h]]==b[t] || h>t )
return 1;
if(t==h+1 && p[b[h]]!=b[t] || h==t )
return 0;
int a[4]={0};// [ ] ( )
int i=h;
for(;i<=t;i++){
k[b[i]]++;
if( k[p[b[h]]]==k[b[h]] ){
return pipei(b,i+1,t)&&pipei(b,h+1,i-1) ;
}
}
if(i==t+1)
return 0;
}

这是关于括号配对程序我的代码,不能ac,原因是超时,请问·怎么优化???
...全文
195 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
asyuae 2012-09-26
  • 打赏
  • 举报
回复
嗯,我这也可以,给你分
windmissing 2012-09-26
  • 打赏
  • 举报
回复
我这边编译能通过。CE?怎么CE?
asyuae 2012-09-26
  • 打赏
  • 举报
回复
CompileError........
windmissing 2012-09-26
  • 打赏
  • 举报
回复

#include<iostream>
#include<string>
using namespace std;
#include <stack>

stack<char> S;

bool Pipei(string b)
{
while(!S.empty())S.pop();
int i;
for(i = 0; i < b.size(); i++)
{
if(b[i] == '(' || b[i] == '[')
S.push(b[i]);
else
{
if(S.empty())return 0;
char t = S.top();S.pop();
if(b[i] == ']' && t == '(')
return 0;
if(b[i] == ')' && t == '[')
return 0;
}
}
if(!S.empty())return 0;
return 1;
}
int main(){
string b;
int m;
cin>>m;
for(int i=0 ; i!=m ; i++ ){
cin>>b;
if(Pipei(b))
printf("Yes\n");
else
printf("No\n");
}

return 0;
}
windmissing 2012-09-26
  • 打赏
  • 举报
回复
用个栈就好了
asyuae 2012-09-26
  • 打赏
  • 举报
回复

这是关于括号配对程序我的代码,不能ac,原因是超时,请问·怎么优化???

[Quote=引用楼主 的回复:]
C/C++ code

#include<iostream>
#include<string>
#include<map>
using namespace std;

int main(){
string b;
int m;
cin>>m;
for(int i=0 ; i!=m ; i++ ){
cin>>b;
bool pipei……
[/Quote]
asyuae 2012-09-26
  • 打赏
  • 举报
回复
描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([[]()])
样例输出
No
No
Yes
windmissing 2012-09-26
  • 打赏
  • 举报
回复
题目是什么?

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧