题目:
思路:无效的括号匹配:左(右)括号多,左右不匹配
遍历字符串的每个字符:若是左括号:入栈;
若是右括号则判断:栈是空的(不匹配:右括号多了)
出栈:若左右括号不匹配:不匹配
否则继续循环
若栈不为空:不匹配
否则匹配
Stack stack=new Stack();
stack.push(c);
//压栈
stack.pop();
//出栈
char c=stack.top();
//获取栈顶元素
class Solution {
public boolean isValid(String s) {
ArrayList<Character> stack = new ArrayList<>();//申请栈
for (int i = 0; i < s.length(); i++) { //遍历所有字符串
char c = s.charAt(i);//取出来
//判断左、右括号
switch (c) {//左括号压栈
case '(':
case '[':
case '{':
stack.add(c);
break;
case ')': //右括号出栈
case ']':
case '}': {
if (stack.isEmpty()) {
return false;
}
char left = stack.remove(stack.size() - 1);
if (!((left == '(' && c == ')')//left是左括号,c是右括号
|| (left == '[' && c == ']')
|| (left == '{' && c == '}'))) {
//第一个大括号里面是满足的情况,加上非,就是不满足的
//即不匹配,返回false
return false;
}
break;
}
default:
break;
}
}
//所有程序走完了(遍历完了),判断栈内是否还有元素
if (stack.isEmpty()) {
return true;
} else {
return false;
}
}
}
执行结果: