题目的描述:
一开始我的想法是for循环,if语句判断括号类型,但是示例s = "([)]",表明了括号顺序的重要性。根据括号排布的顺序,表明了需要用栈来表示,即先入后出的性质。但是后续具体代码尝试失败。
观看题解,发现使用了unordered_map,哈希表。这一点是我没有预想到的。具体代码思想是首先判断字符串长度是否为偶数,奇数的话直接返回0。然后判断字符串里面的括号,若为({【这三种括号,则进行入栈操作,如果是)}】这三种括号,则将其与出栈后的字符进行比较。
具体代码如下所示:
class Solution {
public:
bool isValid(string s) {
int n = s.size();
if (n % 2 == 1) {
return false;
}
unordered_map<char, char> pairs = {
{')', '('},
{']', '['},
{'}', '{'}
};
stack<char> stk;
for (char ch: s) {
if (pairs.count(ch)) {
if (stk.empty() || stk.top() != pairs[ch]) {
return false;
}
stk.pop();
}
else {
stk.push(ch);
}
}
return stk.empty();
}
};