将括号左半边作为key值,右半边作为对应的value值存入HashMap
HashMap<Character,Character> map= new HashMap<>();
map.put('<','>');
map.put('[',']');
map.put('{','}');
map.put('(',')');
遍历字符串,如果栈为空,将对应元素放入
如果栈不为空,判断栈顶对应的value值是不是当前元素,当前栈顶对应作为key值是否有对应的value值 如果是则弹栈
不是则压栈.
最后如果栈为空则该表达式括号使用规范
代码实现:
import java.util.HashMap;
public class MatchBracket {
public static void main(String[] args) {
String str = "{()[({<>})]}";
ArrayStack<Character> stack = new ArrayStack<>();
HashMap<Character,Character> map= new HashMap<>();
map.put('<','>');
map.put('[',']');
map.put('{','}');
map.put('(',')');
for (int i =0;i<str.length();i++){
char c =str.charAt(i);
if (stack.isEmpty()){
stack.push(c);
}else {
char top = stack.peek();
if (map.containsKey(top) && c == map.get(top)){
stack.pop();
}else {
stack.push(c);
}
}
}
System.out.println(stack.isEmpty());
}
}