题目
C++ solution
class Solution {
public:
bool isValid(string s) {
stack<char> cstack;
for (int i = 0; i < s.size(); ++i) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{')
cstack.push(s[i]);
else if (s[i] == ')') {
if (cstack.empty() || cstack.top() != '(')
return false;
else
cstack.pop();
}
else if (s[i] == ']') {
if (cstack.empty() || cstack.top() != '[')
return false;
else
cstack.pop();
}
else if (s[i] == '}') {
if (cstack.empty() || cstack.top() != '{')
return false;
else
cstack.pop();
}
}
if (cstack.empty())
return true;
else
return false;
}
};
简要题解
- 从左到右遍历字符串 s 的每个字符。若为左括号(即 ‘(’, ‘[’ 或 ‘{’),则将该字符入栈;若为右括号(即 ‘)’, ‘]’ 或 ‘}’),则判断栈顶的字符是否为与该右括号匹配的左括号,判断为真则将栈顶字符出栈,判断为假则说明 s 不合法,返回 false。
- 遍历结束后,若栈为空,则说明所有字符匹配成功,返回 true;否则,返回 false。