概述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
初始化一个栈,遍历字符串的每一位。
若遇到左括号,直接入栈;
若遇到右括号,首先判断栈是否为空,为空直接返回 false
其次判断栈顶元素是不是右括号对应的反括号,是的话栈顶元素弹出
最后判断栈是否为空,即可知道是不是有效括号
class Solution {
public boolean isValid(String s) {
if (s == null || s.length() == 0){
return false;
}
Stack<Character> stack = new Stack<>();
stack.push(s.charAt(0));
for (int i = 1; i < s.length(); i++) {
char temp = s.charAt(i);
// 左括号直接入队
if (temp == '(' || temp == '[' || temp == '{'){
stack.push(temp);
} else { // 右括号
// 栈为空不能添加右括号
if (stack.isEmpty()){
return false;
}
// 栈顶元素和右括号是否匹配
if (isParttern(stack.peek(),temp)){
// 弹出栈顶元素,继续下一次循环
stack.pop();
} else {
//
return false;
}
}
}
return stack.isEmpty();
}
// 左右括号 是否匹配
public boolean isParttern(char a, char b) {
if (a == '(' && b == ')') {
return true;
} else if (a == '[' && b == ']') {
return true;
} else if (a == '{' && b == '}') {
return true;
}
return false;
}
}