LeetCode 20. 有效的括號 Valid Parentheses(C語言)
阿新 • • 發佈:2018-12-21
題目描述:
給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字串,判斷字串是否有效。
有效字串需滿足:
- 左括號必須用相同型別的右括號閉合。
- 左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
示例 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;
}