2016-06-08 3 views
-3

Проверьте наличие входов, подобных [])), []) и т. Д., Для которых она дает ошибку времени выполнения, но для других входных данных, таких как [[]], она работает нормально.Сбалансированная скобка с ошибкой времени выполнения

class Solution { 
public: 
bool isValid(string s) 
{ 
    stack<char> st; 
    int i=0; 
    char top; 
    if(s[0] == ']' || s[0] == ')' || s[0] == '}') 
     return 0; 
    while(s[i]!='\0') 
    { 

     if(s[i] == '[' || s[i] == '(' || s[i] == '{') 
      { 

       st.push(s[i]); 
       i++; 
       continue; 
      } 

     else if(st.top() == '(' && s[i] == ')') 
      { 
       st.pop(); 
       i++; 
       continue; 
      } 

     else if(st.top() == '{' && s[i] == '}') 
      { 
       st.pop(); 
       i++; 
       continue; 
      } 

     else if(st.top() == '[' && s[i] == ']') 
      { 
       st.pop(); 
       i++; 
       continue; 
      } 
     else 
      { 
       st.push(s[i]); 
       i++; 
       continue; 
      } 

    } 
    if(st.empty()) 
     return 1; 
    else 
     return 0; 
} 
}; 
+0

пытается перефразируйте свой вопрос, я не понимаю, что вы просите, убедитесь, что вы добавили соответствующие теги – Jerzyk

+0

Я получаю ошибку времени выполнения на входе «[]))», но вместо этого он должен возвращать значение false. –

+0

Похоже, вы получили полезный ответ ниже, но не ответили на него. Обратите внимание, что сайты, такие как Stack Overflow, полностью исполняются на основе доброй воли сообщества, поэтому, пожалуйста, старайтесь поощрять его взаимодействием и голосами столько, сколько вы можете собрать. – halfer

ответ

0

Я не знаю, на каком языке вы пишете этот код, и очень неясно, чего вы хотите достичь.

Проводя минутку, чтобы пройти через ваш код, я могу вычесть, что у вас есть функция, которая проверяет, есть ли у вас допустимые круглые скобки (может быть любая комбинация {}() [], если они не пересекают каждый другие.

Итак, почему ваш код не работает? Потому что вы делаете стек вызовов, когда стек пуст.

Итак, давайте попробуем переписать код ...

int i = 0; 

while(s[i] != '\0') { 

    if (s[i] == '[' || s[0] == '(' || s[0] == '{') { 
     /* push every opening bracket to the stack */ 
     st.push(s[i]); 
    } else if (s[i] == ']' || s[i] == ')' || s[i] == '}') { 
     /* now we got closing bracket */ 
     if (st.empty()) { 
      /* let's check if stack is empty - this may happen in 2 cases: 
       - closing bracket as first character 
       - this is errorneus bracket 
      */ 
      return 0; 
     } else { 
      /* stack is not empty - this part of the code could be 
       put in first "if" part, but I do not know how expensive 
       is access to the stack, so for code clarity and 
       possible performance gain - leaving it here  

       so we get char from the top of the stack 
      */ 

      char top = st.pop(); 
      if (not ((top == '(' and s[i] == ')') || 
         (top == '[' and s[i] == ']') || 
         (top == '{' and s[i] == '}'))) { 
       return 0 
      } 
     } 
    } 
    i++; 
} 
return st.is_empty()