LeetCode OJ-20.Valid Parentheses
题目描述
Given a string containing just the characters
'('
,')'
,'{'
,'}'
,'['
and']'
, determine if the input string is valid.The brackets must close in the correct order,
"()"
and"()[]{}"
are all valid but"(]"
and"([)]"
are not.Subscribe to see which companies asked this question.
题目理解
一个括号匹配的问题,字符串中仅含需要匹配的几种括号,用栈匹配就好了,在遍历字符串过程中,出现不匹配则将返回值res赋值为false,并退出循环,最后的判断条件应是,栈为空,因为匹配时,会将栈中左半边的括号做pop操作。具体代码在下方,包含一些处理的细节。
Code
class Solution {
public:
bool isValid(string s) {
bool res = true;
std::stack<char> syms;
int len = (int) s.length();
int i;
res = (len % 2) == 0 ? true : false; // 若字符串中括号匹配,则应满足长度为偶数
for (i = 0; i < len && res; ++i) {
switch (s[i]) {
case '(':
syms.push(s[i]);
break;
case '[':
syms.push(s[i]);
break;
case '{':
syms.push(s[i]);
break;
case ')':
if (syms.empty() || syms.top() != '(') { // 需要先做判断,符号栈是否为空,对空栈做top是错误行为
res = false;
}
else {
syms.pop();
}
break;
case ']':
if (syms.empty() || syms.top() != '[') {
res = false;
}
else {
syms.pop();
}
break;
case '}':
if (syms.empty() || syms.top() != '{') {
res = false;
}
else {
syms.pop();
}
break;
default:
break;
}
}
if (syms.empty() != true) { // 若括号能匹配,则最后符号栈应该为空
res = false;
}
return res;
}
};