题目描述
英文版描述
Given a string s
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.
- Every close bracket has a corresponding open bracket of the same type.
Example 1:
Input: s = "()" Output: true
Example 2:
Input: s = "()[]{}" Output: true
Example 3:
Input: s = "(]" Output: false
Constraints:
1 <= s.length <= 10(4)
s
consists of parentheses only'()[]{}'
.
英文版地址
中文版描述
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入: s = "()"
输出: true
示例 2:
输入: s = "()[]{}"
输出: true
示例 3:
输入: s = "(]"
输出: false
提示:
1 <= s.length <= 10(4)
s
仅由括号'()[]{}'
组成
中文版地址
解题方法
俺这版
java
class Solution {
public boolean isValid(String s) {
if (s == null) {
return true;
}
char[] chars = s.toCharArray();
int len = chars.length;
Stack<Character> stack = new Stack<>();
for (int i = 0; i < len; i++) {
if (stack.isEmpty()) {
if (chars[i] == ')' || chars[i] == ']' || chars[i] == '}') {
return false;
} else {
stack.push(chars[i]);
}
} else {
if (chars[i] == '(' || chars[i] == '[' || chars[i] == '{') {
stack.push(chars[i]);
continue;
} else {
Character pop = stack.pop();
if (chars[i] == ')') {
if (pop.equals('(')) {
continue;
} else {
return false;
}
}
if (chars[i] == ']') {
if (pop.equals('[')) {
continue;
} else {
return false;
}
}
if (chars[i] == '}') {
if (pop.equals('{')) {
continue;
} else {
return false;
}
}
}
}
}
return stack.isEmpty() ? true : false;
}
}
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(n)