问题描述
- 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