题目:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
输入:s = "()[]{}" 输出:true
思路:
利用栈先进后出,for循环依次遍历,当栈为空,进栈,不为空,记录栈顶元素,与其相应的括号进行匹配,没有可匹配的进栈,最后判断栈是否为空。
代码:
class Solution {
public:
bool isValid(string s) {
stack<char> buffer;
for (int i = 0; i < s.size(); i++)
{
if (buffer.empty())
{
buffer.push(s[i]);
continue;
}
char top = buffer.top();
if (s[i] == '}' && top == '{')
{
buffer.pop();
continue;
}
else if (s[i] == ']' && top == '[')
{
buffer.pop();
continue;
}
else if (s[i] == ')' && top == '(')
{
buffer.pop();
continue;
}
buffer.push(s[i]);
}
return buffer.empty();
}
};