题目:
给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
实例1: 输入:s = "()" 输出:true 实例2: 输入:s = "()[]{}" 输出:true 实例3: 输入:s = "(}" 输出:false
解析:
在上期中我们讲到了栈的定义,创建以及栈的操作等知识。很明显,这个问题可以使用栈来进行解决。
思路:
- 观察题目要求,左括号必须有右括号闭合。并且括号的顺序不能随意改变的,比如:“[{}()]”是可以的,但是“[{}(])”是不可以的。
- 这里我们发现只有三种类型的括号,那么假设我们先遇到的是左括号那么下一个是不是就是对应的右括号。
- 我们定义一个栈,将字符串转成字符数组进行遍历,若遇到的是左括号就将对应的右括号入栈,如果不是左括号就将当前的字符与栈顶元素进行比较并pop(),若不等于则直接返回FALSE,否则继续遍历。
- 最后返回栈是否为空,空的话则是true,反之是false。
代码:
public boolean isValid(String s) {
Stack<Character>stack = new Stack<Character>();
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();
}