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.
class Solution {
public:
bool isValid(string s) {
stack<char, vector<char> > lifo;
lifo.push('#');
for (size_t i=0; i<s.size(); i++) {
if (s[i] == '{' ||
s[i] == '[' ||
s[i] == '(')
lifo.push(s[i]);
else {
const char ch = lifo.top();
lifo.pop();
if ((s[i] == '}' && ch != '{') ||
(s[i] == ']' && ch != '[') ||
(s[i] == ')' && ch != '('))
return false;
}
}
lifo.pop();
return lifo.empty();
}
};提前进栈一个字符,省得循环中检查栈空了。
在leetcode上的运行时间为4ms。
原文:http://blog.csdn.net/elton_xiao/article/details/42146993