1.问题
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.
2. 解法一
2.1 分析
对于这个题,拿到后的第一反应就是用栈去处理。
- 可以将左括号放入堆栈,如果遇到右括号,那么就比较右括号的内容与左括号是否一致,不一致即可以认为是无效的。
- 所有括号检查完之后,如果堆栈为空,即表明括号是成对出现,不为空,即表示括号不是成对出现的。
- 可以将左右括号写成k-v的形式。
2.2 code
class Solution {
public boolean isValid(String s) {
Map<Character, Character> bracket = new HashMap<>();
bracket.put(')', '(');
bracket.put(']', '[');
bracket.put('}', '{');
Stack stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
Character temp = s.charAt(i);
if (bracket.containsValue(temp)) {
stack.push(temp);
}else if (bracket.containsKey(temp)) {
if (stack.isEmpty()) {
return false;
}
if (stack.peek() == bracket.get(temp)) {
stack.pop();
}else{
return false;
}
}
}
return stack.isEmpty() ? true : false;
}
}
3. 解法二
神奇解法
class Solution {
public boolean isValid(String s) {
int length;
do {
length = s.length();
s = s.replace("()", "").replace("{}", "").replace("[]", "");
} while(length != s.length());
return s.length() == 0;
}
}