1. 题目描述:
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input: "()"
Output: true
Example 2:
Input: "()[]{}"
Output: true
Example 3:
Input: "(]"
Output: false
Example 4:
Input: "([)]"
Output: false
Example 5:
Input: "{[]}"
Output: true
2. 思路分析:
题目的意思是给定一个包含一系列括号的字符串,判断其中的括号是否两两匹配。
括号匹配问题,很自然地想到用栈来处理,即遍历字符串,遇到左括号就入栈,遇到右括号,则出栈并判断与当前的右括号是否匹配。
3. Java代码:
源代码
:见我GiHub主页
代码:
public static boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
// 如果是左括号,则入栈
if (ch == '(' || ch == '[' || ch == '{') {
stack.push(ch);
} else { // 如果是右括号,则比较其与栈顶元素是否配对
if (stack.isEmpty()) {
return false;
}
if (ch == ')' && stack.peek() != '(') {
return false;
}
if (ch == ']' && stack.peek() != '[') {
return false;
}
if (ch == '}' && stack.peek() != '{') {
return false;
}
stack.pop();
}
}
// 最后栈为空则表示完全匹配完毕
return stack.isEmpty();
}