题目:
示例:
输入: "()"
输出: true
输入: "()[]{}"
输出: true
输入: "{[]}"
输出: true
输入: ")}"
输出: false
分析:
如果字符串中的括号都是有效的,依次删掉所有成对的 “()“或”{}“或”[]” 后,字符串最终会变为空串。
遍历字符串,如果字符为左半边括号,入栈,如果为右半边括号,并且与栈顶元素是一对,弹出栈顶元素。
遍历完成后,判断栈是否为空,若为空,说明所有括号为有效的,返回True;若不为空,返回False。
特殊情况:
1.如果栈为空,下一个字符为括号的右半边,栈最后不可能为空,返回false。
2.如果栈顶元素与下一个右半边括号不匹配,栈最后不可能为空,返回false。
代码如下:
class Solution {
public:
bool isValid(string s)
{
if (s.size() % 2 != 0) return 0;
stack <char> brk;
for (int i = 0; i < s.size(); i++)
{
if (brk.empty())
{
if (s[i] == ')' || s[i] == '}' || s[i] == ']') return 0;
else brk.push(s[i]);
}
else
{
if (s[i] == ')' && brk.top() == '(')
{
brk.pop();
}
else if (s[i] == '}' && brk.top() == '{')
{
brk.pop();
}
else if (s[i] == ']' && brk.top() == '[')
{
brk.pop();
}
else if (s[i] == ')' || s[i] == '}' || s[i] == ']') return 0;
else
{
brk.push(s[i]);
}
}
}
if (brk.empty()) return 1;
else return 0;
}
};
运行结果:
没想到竟然100%