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