LeetCode 20 https://leetcode.cn/problems/valid-parentheses/description/
难度:中等
本题是栈的应用。如果是左括号就入栈,如果是右括号,如果栈顶元素与其匹配,则出栈,否则返回 false。最后返回栈是否为空。
时间复杂度:O(n),其中 n 是 s 的长度。
空间复杂度:O(n)。
class Solution {
unordered_map<char, char> mp = {{')', '('}, {']', '['}, {'}', '{'}};
public:
bool isValid(string s) {
if (s.length() % 2) { // s 长度必须是偶数
return false;
}
stack<char> st;
for (char c : s) {
// mp.contains(c) 用来判断 c 是不是 mp 的一个 key
if (!mp.contains(c)) { // c 是左括号
st.push(c); // 入栈
} else { // c 是右括号
if (st.empty() || st.top() != mp[c]) {
return false; // 没有左括号,或者左括号类型不对
}
st.pop(); // 出栈
}
}
return st.empty(); // 所有左括号必须匹配完毕
}
};