[C語言] LeetCode 簡單篇之20題
阿新 • • 發佈:2018-12-02
題目
給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
示例 1:
輸入: “()”
輸出: true
示例 2:
輸入: “()[]{}”
輸出: true
示例 3:
輸入: “(]”
輸出: false
示例 4:
輸入: “([)]”
輸出: false
示例 5:
輸入: “{[]}”
輸出: true
結束
思路
用棧的方法來解題。
1.遇到左括號讓其進棧,遇到對應的右括號將前者出棧。(類似消消樂)
2.若出現的第一個右括號
詳細版
bool isValid(char* s) { int i = 0;//作用:作為陣列s 的下標 int j = 0;//作用:1.記錄左括號個數 2.作為陣列a 的下標 char a[5000];//儲存左括號 while( s[i] != '\0')//遍歷陣列 s { if(s[i]=='(')//遇到左括號就之儲存在陣列中 { a[j++] = '('; } else if(s[i]=='[') { a[j++] = '['; } else if(s[i]=='{') { a[j++] = '{'; } else if(s[i]==')')//遇到右括號先判斷 { if(j==0||a[j-1]!='(')//若其為首個元素 或 左邊第一個沒有與之對應。結束。 { j = -9;//這個只要小於都可以 } else j--; } else if(s[i]==']') { if(j==0||a[j-1]!='[') { j = -9; } else j--; } else if(s[i]=='}') { if(j==0||a[j-1]!='{') { j = -9; } else j--; } if( j==-9) break; i++; } if(j!=0) return false; else return true; }
簡潔版
bool isValid(char* s) { int i = 0; int j = 0; char a[5000]; while( s[i] != '\0') { switch(s[i]) { case '(': a[j++] = '(';break; case '[': a[j++] = '[';break; case '{': a[j++] = '{';break; case ')':(j==0||a[j-1]!='(')?j=-9:j--;break; case ']':(j==0||a[j-1]!='[')?j=-9:j--;break; case '}':(j==0||a[j-1]!='{')?j=-9:j--;break; } if( j==-9) break; i++; } if(j!=0) return false; else return true; }