ACM中括号配对问题,错误提示为内存分配的太大。

程序在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;
}

1个回答

我再完善一下问题。这个ACM的题目为:有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
希望各位老师看看我的程序分配内存时哪些超过了。谢谢。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问