Не могли бы некоторые подсказать мне эту проблему: выражение правильно, только если оно содержит правильно закрытые круглые и фигурные скобки и не содержит других символов, даже пробела. Например, () ({} () ({})) является правильным выражением, тогда как ({)} не является правильным выражением или {} ({})). Пустое выражение (не содержащее ни одного символа) является правильным. Учитывая строковое выражение, определите, являются ли выражения правильными, и если да, то определите максимальный уровень вложенности. Максимальный уровень вложенности скобок равен максимальному количеству друг друга.
Примеры {}({}){{((({}))}} ответ : 5
{}({})) -1 (поскольку выражение неверно)
Это то, что я сделал до сих пор.
#include <stdio.h>
#include <stdlib.h>
FILE *fi, *fo;
int first, er;
void X();
void Y();
void S() {
X();
Y();
}
void X() {
if(first=='{') {
first=fgetc(fi);
X();
if(first=='}')
first=fgetc(fi);
else
er=1;
S();
}
}
void Y() {
if(first=='(') {
first=fgetc(fi);
Y();
if(first==')')
first=fgetc(fi);
else
er=1;
S();
}
}
int main()
{
fi = fopen("brackets.in","r");
fo = fopen("brackets.out","w");
first=fgetc(fi);
S();
if(first!='\n')
er=-1;
fprintf(fo,"%d",er);
fclose(fi);
fclose(fo);
return 0;
}
stack data structure
иmax_nesting
. Продолжайте нажимать все открытые скобки, пока не найдете закрывающие скобки. Как только вы получите закрывающую скобку, обновитеmax_nesting
. Если она больше, чем предыдущее значение, обновитеmax_nesting
. - person Ankur   schedule 16.12.2014O(1)
памятью. Даже решение типа синтаксического анализатора с рекурсивным спуском должно будет использовать дополнительную память, линейно связанную с максимальным уровнем вложенности, даже если она не выделена явно (т.е. рекурсивные вызовы требуют дополнительных кадров стека)... Теперь, может быть, если бы ввод пришел в виде строки , а не по символу, вы можете использовать саму строку и стирания, чтобы избежать дополнительной памяти, но, похоже, это не так... - person twalberg   schedule 16.12.2014() ({} () ({}))
содержит пробелы во втором наборе()
. - person Weather Vane   schedule 16.12.2014