Gegeben eine Folge bestehend aus Klammern, bestimmen, ob der Ausdruck ausgeglichen ist. Eine Folge von Klammern ist ausgeglichen, wenn alle offenen Klammern eindeutig mit einem geschlossenen Klammerpaar nach dem ersteren verknüpft werden können. Auch das Intervall zwischen ihnen muss ausgeglichen sein. Sie werden drei Arten von Klammern angegeben werden: ({und [
{[()]} - Dies ist eine ausgewogene Klammer
{[(])} - Dies ist nicht eine ausgewogene Klammer..
FormatInput:...
* die erste Zeile der Eingabe die Anzahl der Testfälle enthält
* Jeder Testfall mit der Sequenz von Klammern aus einer einzigen Linie besteht
stack <char> stk;
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int n;
cin>>n;
for(int i=0;i<n;i++)
{
string s;
cin>>s;cout<<s;
int j=0;
while(j!=s.length())
{
if(stk.size()==0&&(s[j]==')'||s[j]==']'||s[j]=='}'))
{stk.push('z');}
if(s[j]=='('||s[j]=='['||s[j]=='{')
stk.push(s[j]);
if(stk.top()=='('&&s[j]==')')
stk.pop();
if(stk.top()=='['&&s[j]==']')
stk.pop();
if(stk.top()=='{'&&s[j]=='}')
stk.pop();
j++;
}
if(stk.size()==0)
cout<<"YES"<<endl;
else
{
cout<<"NO"<<endl;
while(stk.size()!=0)
stk.pop();
}
}
return 0;
}
Es ist ein Code zum Überprüfen auf ausgeglichene Klammern. Es funktioniert einwandfrei mit Strings, die mit einem '{' beginnen, aber mit Strings wie "[]" fehlschlagen.
Debugger ....... – kaylum
Anstelle von 'stk.push ('z')' können Sie einfach einen booleschen Wert 'invalid' auf 'true' setzen und einen 'break;' aus der Schleife machen. –
Hier ist ein Hinweis: Versuchen Sie zu tauschen: 'if (stk.top() == '[' && s [j] == ']')' und 'if (stk.top() == '{' && s [j] == '}') 'und sehen, wie sich die Dinge ändern. –