简单的括号匹配
[Q20]
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
Java代码实现
public boolean isValid(String s) {
if(s == null || s.length() == 0){
return true; // null和0返回true
}else if(s.length() % 2 != 0){
return false; //括号数量为奇数返回false
}
Map<Character, Character> map = new HashMap<>(){{
put(']', '[');
put(')', '(');
put('}', '{');
}};
Stack<Character> stack = new Stack<>();
//foreach循环遍历字符数组
for(char c : s.toCharArray()){
if(map.containsKey(c)){
if(stack.empty() || map.get(c) != stack.pop()){
return false;
}
}else{
stack.push(c);
}
}
return stack.empty();
}
注意:
if(stack.empty() || map.get(c) != stack.pop()){
return false;
}
在有后括号未匹配的情况下:
- 栈已空
- 栈顶中前括号与该后括号不匹配
就返回false