给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。
括号必须以正确的顺序关闭,”()” 和 “()[]{}” 是有效的但是 “(]” 和 “([)]” 不是。
-- 实现方法一
public boolean isValid(String s) {
if (null == s
|| s.trim().length() <= 1
|| s.length()%2 != 0) {
return false;
}
List<Character> list = new ArrayList<Character>();
for (char c : s.toCharArray()) {
if (c == '('){
list.add(')');
continue;
}else if (c == '{'){
list.add('}');
continue;
} else if (c == '['){
list.add(']');
continue;
}
if (list.isEmpty()
|| list.get(list.size()-1) != c){
return false;
} else {
list.remove(list.size()-1);
}
}
return list.isEmpty();
}
-- 实现方法二
public boolean isValid1(String s) {
if (null == s
|| s.trim().length() <= 1
|| s.length()%2 != 0) {
return false;
}
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() || stack.pop() != c)
return false;
}
return stack.isEmpty();
}
原理: 用栈的方式peek,获取顶部内容值,并删除内容值
java.util.Stack
E push(E item)
把项压入堆栈顶部。
E pop()
移除堆栈顶部的对象,并作为此函数的值返回该对象。
E peek()
查看堆栈顶部的对象,但不从堆栈中移除它。
boolean empty()
测试堆栈是否为空。
int search(Object o)
返回对象在堆栈中的位置,以 1 为基数。