1、括号匹配问题
LeetCode20
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例1:
输入:s=“()[]{}”
输出:true
2.使用哈希表+栈
代码如下:
if (s.length() <= 1) {
return false;
}
Map<Character, Character> smap = new HashMap<>();
smap.put('(', ')');
smap.put('{', '}');
smap.put('[', ']');
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char item = s.charAt(i);
if (smap.containsKey(item)) {
stack.push(item);
} else {
if (!stack.isEmpty()) {
Character left = stack.pop();
char rightchar = smap.get(left);
if (rightchar != item) {
return false;
}
} else {
return false;
}
}
}
return stack.isEmpty();
2.单纯栈
代码如下:
Stack<Character> stack = new Stack<Character>();
if (s.length() <= 1) {
return false;
}
for (char c : s.toCharArray()) {
if (c == '(') {
stack.push(')');
} else if (c == '[') {
stack.push(']');
} else if (c == '{') {
stack.push('}');
} else if (stack.isEmpty() || c != stack.pop()) {
return false;
}
}
return stack.isEmpty();