попробуйте решать эту задачу, используя стек.
В нем будете хранить только открывающиеся скобки. При нахождении закрывающейся скобке в строке, выбрасываете элемент из стека, если он есть. В конце концов, если строка верная последовательность, стек будет пуст!
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| #include <iostream>
#include <string>
#include <stack>
int main()
{
std::string s;
std::cin >> s;
std::stack < char > st;
bool f = true;
int index = 0;
while ( index < s.length() && f )
{
if ( s [ index ] == ')' )
{
f = ( !st.empty() );
if ( f )
st.pop();
}
else
st.push ( s [ index ] );
index++;
}
std::cout << ( ( f && st.empty() ) ? "YES" : "NO" ) << std::endl;
} |
|
На тестовых примерах проходит... Тестируйте!
P.S. Контестер это решение принял =)