方法一:使用栈
import java.util.Stack;

public class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
if (c == '(' || c == '{' || c == '[') {
stack.push(c);
} else {
if (stack.isEmpty()) {
return false;
}
char top = stack.pop();
if (c == ')' && top != '(') {
return false;
}
if (c == '}' && top != '{') {
return false;
}
if (c == ']' && top != '[') {
return false;
}
}
}
return stack.isEmpty();
}
}
为什么要这么写:
- 使用栈可以方便地处理括号匹配问题,遇到左括号就入栈,遇到右括号就出栈并判断是否匹配。
- 如果栈为空,说明没有对应的左括号,返回false。
- 如果遍历完字符串后栈不为空,说明有未匹配的左括号,返回false。
- 如果遍历完字符串后栈为空,说明所有括号都匹配成功,返回true。
方法二:使用哈希表
import java.util.HashMap;
import java.util.Map;
public class Solution {
public boolean isValid(String s) {
Map<Character, Character> map = new HashMap<>();
map.put(')', '(');
map.put('}', '{');
map.put(']', '[');
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
if (map.containsKey(c)) {
if (stack.isEmpty() || stack.pop() != map.get(c)) {
return false;
}
} else {
stack.push(c);
}
}
return stack.isEmpty();
}
}
为什么要这么写:
- 使用哈希表可以将字符与对应的左括号进行映射,方便查找。
- 遍历字符串时,如果当前字符是右括号,就从栈中弹出一个元素并与当前字符进行比较,如果不匹配则返回false。
- 如果遍历完字符串后栈为空,说明所有括号都匹配成功,返回true。