一、题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。示例 1:
输入:s = "()"
输出:true
示例 2:输入:s = "()[]{}"
输出:true
二、思路
括号匹配是栈的经典例题,必会!思路是从左到右依次遍历字符串中每个字符,如果遇到左括号,将与之对应的右括号入栈。然后继续遍历,如果遇到右括号,访问栈顶元素并出栈,如果两个右括号完全相同则匹配成功。最后当字符串遍历完成,所有括号完成匹配并且栈为空时成功。
三、代码
class Solution {
public:
bool isValid(string s) {
stack<char> a;
for(char n:s)
{
if(n=='(') a.push(')');
else if(n=='{') a.push('}');
else if(n=='[') a.push(']');
else if((n==')'||n=='}'||n==']')&&!a.empty())
{
if(n==a.top()) a.pop();
else return false;
}
else return false;
}
if(a.empty()) return true;
else return false;
}
};
执行结果:通过
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:6.2 MB, 在所有 C++ 提交中击败了47.59%的用户
通过测试用例:91 / 91
四、知识点
1.【栈】的特点:先进后出
2.【for(char n:s)】增强for循环:不用下标的简化写法 for(int i=0;i<n;i++)这样写也可