程序在VS上可以运行,但是ACM在线测试错误提示为“内存申请的太多,超过了限制”,请问各位老师这个怎么优化一下?备注:题目要求为时间限制:3000 ms | 内存限制:65535 KB。
#include <stdlib.h>
#include <string>
#include <stack>
#include <stdio.h>
#include <iostream>
using namespace std;
int main(void)
{
stack<char> S;
int n;
scanf("%D",&n);
string pour;
string *result = new string[n];
bool ifgo = true;
for(int i=0;i<n;i++)
{
cin>>pour;
if(pour[0] == ']' || pour[0]==')')
{
result[i] = "No";
}
else
{
for(int j=0;j<pour.length() && ifgo==true;j++)
{
switch(pour[j])
{
case ']':
if(!S.empty())
{
if(S.top()=='[')
{
S.pop();
}
else
{
result[i] = "No";
ifgo = false;
}
}
break;
case ')':
if(!S.empty())
{
if(S.top()=='(')
{
S.pop();
}
else
{
result[i] = "No";
}
}
break;
case '[':
S.push(pour[j]);
break;
case '(':
S.push(pour[j]);
break;
default:break;
}
}
if(S.empty())
{
result[i] = "Yes";
}
else
{
result[i] = "No";
while(!S.empty())
{
S.pop();
}
}
ifgo = true;
}
}
for(int k=0;k<n;k++)
{
cout<<result[k]<<'\n';
}
delete[] result;
}
我再完善一下问题。这个ACM的题目为:有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
希望各位老师看看我的程序分配内存时哪些超过了。谢谢。