Задача на скобочки
Задача:
Некоторые скобочные структуры правильные, другие - неправильные. Ваша задача: определить, правильная ли скобочная структура.
Вход: Слово в алфавите из двух круглых скобочек ( и ), [, ], {, }. Длина слова меньше 40001.
Выход: Либо 'NO', либо 'YES' без кавычек.
Вот текст моей программы, но она не проходит все тесты. Не пойму, где ошибка. И какие тесты она не проходит (не смог таких придумать).
int main()
{
std::string s;
std::cin >> s;
std::stack < char > st;
std::stack < char > st1;
std::stack < char > st2;
bool f = true, g = true, k = true;
int index = 0;
while (index < s.length() && f && g && k)
{
if (s[index] == ')')
{
f = (!st.empty());
if (f)
st.pop();
}
else
if (s[index] == ']')
{
g = (!st1.empty());
if (g)
st1.pop();
}
else
if (s[index] == '}')
{
k = (!st2.empty());
if (k)
st2.pop();
}
else
if (s[index] == '(')
{
st.push(s[index]);
}
else
if (s[index] == '[')
{
st1.push(s[index]);
}
else
if (s[index] == '{')
{
st2.push(s[index]);
}
index++;
}
std::cout << (((k && f && g && st.empty() && st1.empty() && st2.empty()) ? "YES" : "NO")) << std::endl;
}
Прошу помощи.
Обновление
Программа работает, но на каких-то тестах она работает неправильно (при загрузке в систему проходят не все тесты). Какие там тесты, мне не известно. И я не могу выяснить, при каких условиях она ошибается, прошу помочь именно в этом.
Просто хочу научиться работать со стеком. Не подумал о Вашем примере. Попробовал реализовать заново с помощью трех стеков, Ваш пример теперь работает правильно, но снова не проходит все тесты в системе. Код изменил в ответе. Посмотрите, пожалуйста.