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
    希望各位老师看看我的程序分配内存时哪些超过了。谢谢。

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

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧