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