is_thinking 2015-05-03 12:49 采纳率: 66.7%
浏览 1840
已采纳

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条回答

  • is_thinking 2015-05-03 12:52
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!