­

LeetCode题组:第20题-有效的括号

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;  }