题目
我的思路
定义一个栈
将字符串转为数组
循环数组,判断
如果是左括号,则把对应的右括号加入栈中
如果是右括号,一次取出栈中的值判断是否相同,不同则无效
代码
class Solution {
public boolean isValid(String s) {
// 定义栈 Character,char 的包装类型
Stack<Character> stack = new Stack<>();
// 把字符串转为数组
char[] arr = s.toCharArray();
for(char c : arr) {
// 如果循环的是左半边括号,则把对称的括号放入栈中
if (c == '(') {
stack.push(')');
} else if (c == '[') {
stack.push(']');
} else if (c == '{') {
stack.push('}');
} else if (stack.isEmpty() || stack.pop() != c) {
// 如果出现的是右括号
// 这时候如果栈里没有左括号返回 false
// 利用栈的后进先出,如果值栈中取出的不相同(之前放入栈里的是左括号对应的右括号),则为 false
return false;
}
}
return stack.isEmpty();
}
}