[LeetCode]2020/11/16
LeetCode 20
题目描述
这是一道简单题,做括号匹配,核心思想就是利用栈来做。
有意思的解法
自己写完后,去看了看题解,发现一个有意思的解法,在这里记录一下。
这道题如果需要判断有效,一类括号左右必须是连着的。
public boolean isValid(String s) {
LinkedList<Character> stack = new LinkedList<>();
for (char c : s.toCharArray()) {
// 碰到左类括号时,将对应的右类括号入队
if (c == '[') stack.push(']');
else if (c == '(') stack.push(')');
else if (c == '{') stack.push('}');
// 如果是右类括号,则与队列中的第一个右括号比较,是否相等
else if (stack.isEmpty() || c != stack.pop()) return false;
}
// 遍历完所有如果栈不空必是不匹配的
return stack.isEmpty();
}
-
这里声明的变量stack实质是LinkedList,它的pop是删除并返回列表的第一个元素,push是 将元素插入列表的前面。
-
一般的思想是将左类括号入栈,碰到右类括号时做匹配判断。这道题是将应该匹配的右类括号入栈,然后与实际的右类括号做比较。
-
LinkedList的remove函数传参可以是object也可以是index,传object的时候返回的是,true/false,传index的时候传的是删除的这个对象