1. 程式人生 > >LeetCode 20. 有效的括號 Valid Parentheses(C語言)

LeetCode 20. 有效的括號 Valid Parentheses(C語言)

題目描述:

給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字串,判斷字串是否有效。
有效字串需滿足:

  1. 左括號必須用相同型別的右括號閉合。
  2. 左括號必須以正確的順序閉合。

注意空字串可被認為是有效字串。

示例 1:

輸入: “()”
輸出: true

示例 2:

輸入: “()[]{}”
輸出: true

示例 3:

輸入: “(]”
輸出: false

示例 4:

輸入: “([)]”
輸出: false

示例 5:

輸入: “{[]}”
輸出: true

題目解答:

方法1:棧

因為要按照正確的順序閉合,所以後出現的左括號,應該先有其對應的右括號出現進行匹配。即後入先出,所以考慮用棧。對於出現的左括號,將其對應的右括號入棧。對於出現的右括號,如果棧不為空,則判斷棧頂元素是否為該右括號,不是則說明匹配失敗,是則出棧。最後判斷棧是否為空,即是否還有沒有匹配的左括號。
執行時間0ms,程式碼如下。

bool isValid(char* s) {
    char stack[10000]= { 0 };
    int top = 0;
    while(*s) {
        if(*s == '(')
            stack[
top++] = *s + 1; else if(*s == '[' || *s == '{') stack[top++] = *s + 2; else if(top == 0) return false; else if(stack[top - 1] == *s) top--; else return false; s++; } return top == 0; }