20. 有效的括号
二刷
class Solution {
public:
bool isValid(string s) {
stack<char> S;
for (int i = 0; i < s.size(); ++i) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{')
S.push(s[i]);
if (s[i] == ')') {
// Remember to check for emptyness.
if (S.empty() || S.top() != '(')
return false;
S.pop();
}
if (s[i] == ']') {
if (S.empty() || S.top() != '[')
return false;
S.pop();
}
if (s[i] == '}') {
if (S.empty() || S.top() != '{')
return false;
S.pop();
}
}
// Here also.
return S.empty();
}
};
没什么好说的,注意过程判空以及结果判空即可。
三刷
class Solution {
public:
bool isValid(string s) {
std::stack<char> S;
for (char X : s) {
switch (X) {
case '(':
case '{':
case '[':
S.push(X);
break;
case ')':
if (S.empty() || S.top() != '(')
return false;
S.pop();
break;
case '}':
if (S.empty() || S.top() != '{')
return false;
S.pop();
break;
case ']':
if (S.empty() || S.top() != '[')
return false;
S.pop();
break;
default:
return false;
}
}
return S.empty();
}
};