Valid Parentheses

mac2025-01-11  8

Valid Parentheses

Given a string containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

An input string is valid if:

Open brackets must be closed by the same type of brackets. Open brackets must be closed in the correct order. Note that an empty string is also considered valid.

Example 1:

Input: “()” Output: true

Example 2:

Input: “()[]{}” Output: true

Example 3:

Input: “(]” Output: false

Example 4:

Input: “([)]” Output: false

Example 5:

Input: “{[]}” Output: true

// use the list stack to achieve //4ms 7.1M struct stack_node{ int data; struct stack_node *next; }; typedef struct stack_node *Node; typedef Node Stack; Stack create_stack(){ Stack s= (Stack)malloc(sizeof(struct stack_node)); if (s == NULL) printf("malloc failed\n"); s->next=NULL; return s; } void push_stack(Stack s, int data){ Stack node= (Stack)malloc(sizeof(struct stack_node)); if (node == NULL) printf("malloc failed\n"); node->data = data; node->next = s->next; s->next = node; } void pop_stack(Stack s){ Stack node= (Stack)malloc(sizeof(struct stack_node)); if (node == NULL) printf("malloc failed\n"); if (stack_is_empty(s)) return false; else { node = s->next; s->next = node->next; free(node); } } int stack_is_empty(Stack s) { return s->next == NULL; } //读取栈定元素一定要判断是否为空,用例:‘]’ int top_stack(Stack s) { if (stack_is_empty(s)) { printf("Stack is empty!\n"); return false; } else { return s->next->data; } } bool isValid(char * s){ Stack stack = create_stack(); char *p = s; while(*p != '\0') { if(*p == '(' || *p == '{' || *p == '[') push_stack(stack, *p); else if (*p == ')') { if (top_stack(stack) != '(') return false; else pop_stack(stack); } else if (*p == '}') { if (top_stack(stack) != '{') return false; else pop_stack(stack); } else if (*p == ']') { if (top_stack(stack) != '[') return false; else pop_stack(stack); } else return false; ++p; } if (stack_is_empty(stack)) return true; else return false; }

通过链表也有很大的局限性。当前使用单链表来实现栈。通过在表顶端插入一个元素来实现 PUSH,通过删除表顶端元素来实现 POP。但是功能有些受限制,动态栈只能在栈顶处进行插入和删除操作,不能在栈尾或栈中间进行插入和删除操作。

最新回复(0)