From 6567568a60897ea9792d41f9089d392157cd1c6a Mon Sep 17 00:00:00 2001 From: begeekmyfriend Date: Wed, 2 Aug 2017 10:55:38 +0800 Subject: [PATCH] Valid parentheses Signed-off-by: begeekmyfriend --- 020_valid_parentheses/Makefile | 2 + 020_valid_parentheses/valid_parentheses.c | 47 +++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 020_valid_parentheses/Makefile create mode 100644 020_valid_parentheses/valid_parentheses.c diff --git a/020_valid_parentheses/Makefile b/020_valid_parentheses/Makefile new file mode 100644 index 0000000..04fa256 --- /dev/null +++ b/020_valid_parentheses/Makefile @@ -0,0 +1,2 @@ +all: + gcc -O2 -o test valid_parentheses.c diff --git a/020_valid_parentheses/valid_parentheses.c b/020_valid_parentheses/valid_parentheses.c new file mode 100644 index 0000000..8fa87c8 --- /dev/null +++ b/020_valid_parentheses/valid_parentheses.c @@ -0,0 +1,47 @@ +#include +#include +#include + +static bool isValid(char *s) +{ + int n = 0, cap = 100; + char *stack = malloc(cap); + + while (*s != '\0') { + switch(*s) { + case '(': + case '[': + case '{': + if (n + 1 >= cap) { + cap *= 2; + stack = realloc(stack, cap); + } + stack[n++] = *s; + break; + case ')': + if (stack[--n] != '(') return false; + break; + case ']': + if (stack[--n] != '[') return false; + break; + case '}': + if (stack[--n] != '{') return false; + break; + default: + return false; + } + s++; + } + + return n == 0; +} + +int main(int argc, char **argv) +{ + if (argc != 2) { + fprintf(stderr, "Usage: ./test xxxx"); + exit(-1); + } + printf("%s\n", isValid(argv[1]) ? "true" : "false"); + return 0; +}