puzzles/parens-substring/parens_substring.c
Zoé Cassiopée Gauthier 7e4f02547b Initial commit
2024-04-02 17:01:09 -04:00

40 lines
983 B
C

#include <stdbool.h>
#include <stdio.h>
int main(int argc, char **argv) {
int length, maxlength, stacksize;
length = maxlength = stacksize = 0;
while (true) {
int c;
c = getc(stdin);
if (c == '\n') {
/* Remove extra left parenthesis and check if it's the longest substring. */
if (length - stacksize > maxlength) {
maxlength = length - stacksize;
}
printf("%d\n", maxlength);
length = maxlength = stacksize = 0;
} else if (c == EOF) {
putchar('\n');
break;
} else if (c == '(') {
length++;
stacksize++;
} else if (c == ')') {
stacksize--;
length++;
if (stacksize == 0 && length > maxlength) {
/* Parenthesis substring completely closed, keep length and continue counting. */
maxlength = length;
} else if (stacksize < 0) {
/* Extra closing parenthesis, reset all counters. */
length = 0;
stacksize = 0;
}
}
}
}