給定只含 ()[]{} 的字符串,判斷括號是否合法:左括號必須與同類型右括號按正確順序閉合。
({[ 入棧。)}]:若棧空 → 非法;否則彈出棧頂,檢查類型是否匹配(()、[]、{}),不匹配 → 非法。bool isValid(string s) {
stack st;
for(char c : s) {
if(c=='(' || c=='{' || c=='[') st.push(c);
else {
if(st.empty()) return false;
char top = st.top(); st.pop();
if(c==')' && top!='(') return false;
if(c==']' && top!='[') return false;
if(c=='}' && top!='{') return false;
}
}
return st.empty();
}
O(n),單次遍歷。O(n),最壞全為左括號。unordered_mappairs = {{')','('}, {']','['}, {'}','{'}}; for(char c : s) { if(pairs.count(c)) { // 右括號 if(st.empty() || st.top() != pairs[c]) return false; st.pop(); } else st.push(c); // 左括號 }
利用哈希表存儲匹配關係,代碼更簡潔、易擴展新括號類型。