题目链接:https://leetcode.com/problems/valid-parentheses/
Given a string containing just the characters '('
, ')'
,'{'
, '}'
, '['
and ']'
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
typedef struct StackRecord { //不考虑溢栈实现简单的堆栈
char ch[100];
int top;
}*Stack;
bool isEmpty(Stack stack) {
if (stack->top >= 0)
return false;
return true;
}
Stack init() {
Stack stack = (Stack)malloc(sizeof(struct StackRecord));
stack->top = -1;
return stack;
}
void push(char ch, Stack stack) {
stack->ch[++stack->top] = ch;
}
char top(Stack stack) { //返回栈顶元素,空栈时返回'\0'
if(!isEmpty(stack))
return stack->ch[stack->top];
return 0;
}
void pop(Stack stack) {
--stack->top;
}
bool isValid(char* s) {
Stack stack = init();
while (*s) {
switch (*s) {
case '(': //左括号入栈
case '[':
case '{':
push(*s, stack);
break;
case ')': //右括号,查看栈顶是否为对应左括号。不是返回false;否则出栈
if (top(stack) != '(')
return false;
pop(stack);
break;
case ']':
if (top(stack) != '[')
return false;
pop(stack);
break;
case '}':
if (top(stack) != '{')
return false;
pop(stack);
break;
default:
return false;
}
++s;
}
if (!isEmpty(stack)) //栈内不空说明有多余左括号
return false;
return true;
}