程序在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
希望各位老師看看我的程序分配內存時哪些超過了。謝謝。