LeetCode题组:第20题-有效的括号
- 2020 年 4 月 8 日
- 筆記
1.题目:回文数
给定一个只包括'('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 1.左括号必须用相同类型的右括号闭合。
- 2.左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()” 输出: true
示例 2:
输入: “()[]{}” 输出: true
示例 3:
输入: “(]” 输出: false
示例 4:
输入: “([)]” 输出: false
示例 5:
输入: “{[]}” 输出: true
2.我的解答: 我为了复习栈的相关知识,写了栈的详细操作,可以简化很多代码的。
#include<stdio.h> #include<string.h> //定义结构体 typedef struct SqStack{ char data[10000]; int top; }SqStack; //初始化栈 void initStack(SqStack *stack){ stack->top = 1; } //判断栈是否为空 bool isStackEmpty(SqStack *stack){ if(stack->top==-1){ return true; }else{ return false; } } //入栈 void EnStack(SqStack *stack,char q){ stack->data[++stack->top]=q; } //出栈 int DeStack(SqStack *stack,char q){ if(stack->top==-1)return 0; if(stack->data[stack->top]==q){ stack->top--; return 1; }else{ return 0; } } int isValid(char * s){ //定义一个标志遍历 int flag = 1; SqStack stack; initStack(&stack); for(int i=0;i<strlen(s);i++){ switch(s[i]){ case '(' : EnStack(&stack,'('); break; case '[' : EnStack(&stack,'['); break; case '{' : EnStack(&stack,'{'); break; case ')' : flag=DeStack(&stack,'('); break; case ']' : flag=DeStack(&stack,'['); break; case '}' : flag=DeStack(&stack,'{'); break; } if(flag==0) return 0; //括号不匹配,返回0; } if(isStackEmpty(&stack)) return 1; return 0; } int main(){ char *str = "([werw])"; printf("%d",isValid(str)); return 0; }