力扣oj链接:https://leetcode.cn/problems/valid-parentheses/
一、解题思路
这个题目大致题意就是,给你一些括号,判断左括号与右括号类型和个数是否匹配,如果匹配返回为true,不是返回为false。
实例:
输入:s = "()" 输出:true
输入:s = "(]" 输出:false
根据题意分析,如果我们要使用栈方法,我们可以选择将输入的括号字符串遍历,其中左括号入栈,然后遇见右括号就将左括号出栈,并在其中加一些判定条件,判断括号的类型是否匹配,根据这种方法分析,有如下几种情况:
左括号多(((():字符串遍历完成,但是栈没有空;
右括号多(()))):字符串没有遍历完成,但是栈空了;
括号类型不匹配,加条件判断
右括号开头))():直接判断为不匹配
二、代码编写
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();//定义栈
for (int i = 0; i < s.length(); i++) { //遍历字符串
char ch = s.charAt(i);
if (ch == '(' || ch == '{' || ch == '[') { //如果遍历到左括号,就将左括号入栈
stack.push(ch);
}else {
//遇到右括号或者右括号多,则栈为空
if (stack.empty()) {
return false;//右括号多
}
//读取栈顶的左括号,判断括号类型是否匹配
char ch2 = stack.peek();
if (ch2 == '(' && ch == ')' || ch2 == '[' && ch == ']' || ch2 == '{' && ch == '}') {
stack.pop();
}else {
return false;//括号类型不匹配
}
}
}
//左括号多,栈不为空
if (!stack.empty()) {
return false;
}
return true;
}