程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c++-ACM中括號配對問題,錯誤提示為內存分配的太大。

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
希望各位老師看看我的程序分配內存時哪些超過了。謝謝。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved