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

问题描述

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;
}

解决方案

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

时间: 2025-01-30 05:29:23

c++-ACM中括号配对问题,错误提示为内存分配的太大。的相关文章

C语言内存分配与释放的详解

什么是堆?说到堆,又忍不住说到了栈!什么是 栈? 1.什么是堆:堆是大家共有的空间,分全局堆和局部堆.全局堆就是所有没有分配的空间,局部堆就是用户分配的空间.堆在操作系统对进程 初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏. 2.什么是栈:栈是线程独有的,保存其运行状态和局部自动变量的.栈在线程开始的时候初始化,每个线程的栈互相独立.每个函数都有自己的栈,栈被用来在函数之间传递参数.操作系统在切换线程的时候会自动的切换栈,就是切换SS/ES

C语言中的内存分配与释放

对C语言一直都是抱着学习的态度,很多都不懂,今天突然被问道C语言的内存分配问题,说了一些自己知道的,但感觉回答的并不完善,所以才有这篇笔记,总结一下C语言中内存分配的主要内容. 相关问题 刚刚在一篇博文看到一个简单的问题: //code1 char* toStr() { char *s = "abcdefghijkl"; return s; } int main() { cout << toStr() << endl; return 0; } //code2 c

Android的内存分配与回收

  想写一篇关于android的内存分配和回收文章的想法来源于追查一个魅族手机图片滑动卡顿问题,我们想了很多办法还是没有避免他不停的GC,所以就打算详细的看看内存分配和GC的原理,为什么会不断的GC,GC ALLOC和GC COCURRENT有什么区别,能不能想办法扩大堆内存减少GC的频次等等. 1.JVM内存回收机制 1.1 回收算法 标记回收算法(Mark and Sweep GC)         从"GC Roots"集合开始,将内存整个遍历一次,保留所有可以被GC Roots

win7系统安装应用程序提示“0x009c423内存错误”怎么解决

win7系统安装应用程序提示"0x009c423内存错误"怎么解决 1.原因竟然是WPS和office冲突造成的,一般来说,像这样办公软件,我们选择一款就够了,没有必要同一类型的要安装两款软件,一是容易造成软件冲突,二呢会增加我们系统的负担,选择卸载一款就行了. 2.可以选择用360卫士中的系统急救箱来进行解决. 3.都还不行的话,只有用运行工具进行扫描检查扫描了,他会主动找到错误项,扫描完成后重启就基本上完成了.运行---输入cmd---输入for %1 in (%windir%sy

MySQL常见错误提示及解决方法

130 :文件格式不正确.(还不是很清楚错误的状况) 145 :文件无法打开. 1005:创建表失败. 1006:创建数据库失败. 1007:数据库已存在,创建数据库失败. 1008:数据库不存在,删除数据库失败. 1009:不能删除数据库文件导致删除数据库失败. 1010:不能删除数据目录导致删除数据库失败. 1011:删除数据库文件失败. 1012:不能读取系统表中的记录. 1016:文件无法打开,使用后台修复或者使用 phpmyadmin 进行修复. Quote: 开始=>所有程序=>附

ASP错误提示大全

ASP错误提示大全 MicrosoftVBScript语法错误(0×800A03E9)–>内存不足MicrosoftVBScript语法错误(0×800A03EA)–>语法错误 MicrosoftVBScript语法错误(0×800A03EB)–>缺少?':' MicrosoftVBScript语法错误(0×800A03ED)–>缺少?'(' MicrosoftVBScript语法错误(0×800A03EE)–>缺少?')' MicrosoftVBScript语法错误(0×8

XP系统弹出Ravmond.exe应用程序错误提示框如何解决

XP系统弹出Ravmond.exe应用程序错误提示框如何解决   原因分析: 此电脑上安装了多套安全软件,Ravmond.exe为瑞星杀毒软件的监控程序,且瑞星工作不正常,最后将瑞星卸载掉后解决该问题. 解决方法: 安全软件建议只要安装一套即可,并不是越多越好,如果安装多套软件反而会出现错误冲突导致系统缓慢.关于应用程序错误,内存不能为read提示的问题,有些是在安装某些程序之后出现的,可以找到出现问题的程序软件,卸载即可解决,无需重装系统.

电脑开机常见的错误提示以及解决办法大全

在启动Windows 9x之前有字符提示的错误,属于非关键性的错误,它并不会导致整个硬件系统报废,屏幕有显示说明这台机器还有药可救.但是这是一类很严重的错误,如果不加以排除,系统往往不能正常启动.在下面为大家列出了电脑开机常见的错误提示以及解决办法大全,希望能够帮助到大家. 错误信息CH-2 Time ERROR 是主板时钟TIME #2发生错误时的出现的提示信息通常须更换主板 错误信息CMOS Battery State L0W 系统中有一个用于存放CMOS参数的电池该提示的意思是该电池已用完

开心手机恢复大师扫描数据出现错误提示代码2/255/112

  很多用户在使用开心手机恢复大师时,会遇到一部分自己无法解决的问题--系统会提示您错误代码.以下罗列了部分的错误代码(以及处理方法): 错误代码2: 1.检查数据是否可以正常使用; 2.更换数据线接口(条件允许直接更换数据线),再重启开心手机恢复大师. 错误代码255: 1.查看软件版本.非最新版,建议更新版本. 2.如果您是XP系统,建议您更换电脑再重新尝试. 3.及时做好iTunes备份,并且在第一时间咨询官网技术客服,发送文件日志. 错误代码112: 1.检查您的电脑内存是否充足.默认路