题目描述
20.有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例1
输入: “()”
输出: true
示例2
输入: “()[]{}”
输出: true
示例3
输入: “(]”
输出: false
示例4
输入: “([)]”
输出: false
示例5
输入: “{[]}”
输出: true
解题思路
栈的应用
方法有很多,但最基本的还是栈 ***(stack)***的应用
- 若是右括号则放入栈中
- 左括号则与栈顶元素匹配,若成功则继续,若失败则直接 return false
- 为防止第一个字符串第一个元素为右括号而导致的栈顶指针为空,提前在栈中放一个 flag $
- 最后检查栈顶元素,若 S.top == '$' 则 return true , 否则 return false
代码如下
class Solution {
public:
bool isValid(string s) {
stack<char> S;
S.push('$');
for(int i = 0; i < s.length(); i++)
{
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
{
S.push(s[i]);
}
else if(s[i] == ')' && S.top() == '(')
{
S.pop();
continue;
}
else if(s[i] == ']' && S.top() == '[')
{
S.pop();
continue;
}
else if(s[i] == '}' && S.top() == '{')
{
S.pop();
continue;
}
else
{
return false;
}
}
if(S.top() == '$')
{
return true;
}
else
{
return false;
}
}
};