题目描述:
示例 1:
示例 2:
示例 3:
示例 4:
示例 5:
思路:
- 实例化一个栈,遍历字符串到过程中判断栈是否为空
- 如果栈为空,则当前元素入栈
- 不为空,则取出栈顶元素判断是否可以和当前字符元素组成合法括号”()”,”[]”,”{}”等.
- 是:则删除栈顶元素与当前元素.继续遍历
- 否:当前元素入栈.继续遍历.
- 遍历结束判断栈是否为空,是则返回true,否则返回false.
代码实现:
class Solution {
public boolean isValid(String s) {
Stack<String> stack = new Stack();
for (int i = 0; i < s.length(); i++) {
if (stack.isEmpty()) {
stack.push(s.charAt(i) + "");
} else {
String peekStr = stack.peek();
String charStr = s.charAt(i) + "";
if (isOk(peekStr, charStr)) {
stack.pop();
} else {
stack.push(charStr);
}
}
}
return stack.isEmpty();
}
public boolean isOk(String a, String b) {
return "()".equals(a + b) || "[]".equals(a + b) || "{}".equals(a + b);
}
}