题目
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1: 输入: “()”
输出: true
示例 2: 输入: “()[]{}”
输出: true
示例 3: 输入: “(]”
输出: false
示例 4: 输入: “([)]”
输出: false
示例 5: 输入: “{[]}”
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
思路
基本思路:一看到括号的匹配就会想到栈,建立一个栈,遍历字符串的每一个字符。若遇到左括号,则将相应的右括号放入栈中,若遇到右括号,若栈为空,或栈顶元素与该右括号不同,则不为有效括号,返回false,否则将栈顶元素弹出。最后返回栈是否为空,为空则为true,为有效括号。不为空则为false,说明还有未匹配的括号,不为有效括号。
ps:可以判断字符串的长度,若为奇数,则肯定不为一个有效的括号。
代码
class Solution {
public:
bool isValid(string s) {
//加了这句话,执行用时4ms->0ms
if(s.length()%2==1)
return 0;
stack<char>sk;
for(char c:s){
if(c=='('){
sk.push(')');
}else if(c=='{'){
sk.push('}');
}else if(c=='['){
sk.push(']');
}else if(sk.empty()||c!=sk.top()){
return 0;
}else{
sk.pop();
}
}
return sk.empty();
}
};