题目
Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
解答
思考
- boolean empty()
测试堆栈是否为空。 - Object peek( )
查看堆栈顶部的对象,但不从堆栈中移除它。 - Object pop( )
移除堆栈顶部的对象,并作为此函数的值返回该对象。 - Object push(Object element)
把项压入堆栈顶部。 - int search(Object element)
返回对象在堆栈中的位置,以 1 为基数。
源码
public class ValidParentheses {
public boolean isValid(String s){
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{') {
stack.push(s.charAt(i));
} else if (s.charAt(i) == ')' && !stack.empty() && stack.peek() == '(') {
stack.pop();
} else if (s.charAt(i) == ']' && !stack.empty() && stack.peek() == '[') {
stack.pop();
} else if (s.charAt(i) == '}' && !stack.empty() && stack.peek() == '{') {
stack.pop();
} else {
//其他情况,不合法
return false;
}
}
//返回值,栈空则合法,有值则不合法。
return stack.empty();
}
public boolean isValid2(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
switch (s.charAt(i)) {
case '(':
stack.push('(');
break;
case '{':
stack.push('{');
break;
case '[':
stack.push('[');
break;
case ')':
if (stack.size() == 0 || stack.pop() != '(')
return false;
break;
case '}':
if (stack.size() == 0 || stack.pop() != '{')
return false;
break;
case ']':
if (stack.size() == 0 || stack.pop() != '[')
return false;
break;
}
}
return stack.isEmpty();
}
public static void main(String args[]) {
String s = "{()}";
boolean valid = new ValidParentheses().isValid(s);
System.out.print(valid);
}
}