給定一個只包含 '('、')'、'{'、'}'、'['、']' 的字符串,判斷該字符串是否有效。有效條件:括號必須按正確順序閉合,如 "()" 和 "()[]{}" 有效,但 "(]" 和 "([)]" 無效。
利用棧的先進後出特性,遍歷字符串:
(、{、[ 直接入棧。) 對應 ()。#include <iostream>
#include <vector>
#include <string>
#include <stack>
using namespace std;
bool isValid(string s) {
if (s.empty()) return true;
stack<char> CharStack;
for (int i = 0; i != s.size(); ++i) {
if (s[i] == '(' || s[i] == '{' || s[i] == '[')
CharStack.push(s[i]);
else {
if (CharStack.empty()) return false;
switch (s[i]) {
case ')':
if (CharStack.top() == '(') CharStack.pop();
else return false;
break;
case ']':
if (CharStack.top() == '[') CharStack.pop();
else return false;
break;
case '}':
if (CharStack.top() == '{') CharStack.pop();
else return false;
break;
default: break;
}
}
}
return CharStack.empty();
}
此模板可擴展至:表達式求值、語法解析、編譯器詞法分析等場景。掌握棧處理括號匹配是數據結構的基石技能。