编写一个程序,用以判断字符串中的括号是否匹配。
所谓的匹配,是指左右括号必须相互呼应(同种类型),可以嵌套,但不能交叉。
思想:
遇到左括号时,进栈;
遇到右括号时,判断栈是否为空,1)若栈为空,则直接返回false;
2)若栈不为空,判断栈顶元素是否与之匹配:2.1)若栈顶元素不匹配,返回false; 2.2)若栈顶元素与之匹配,移除栈顶元素;
结束循环时,判断栈是否为空;若栈非空,则证明还有左括号并没有匹配。
实现代码:
import java.util.ArrayDeque; import java.util.Deque; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = ""; str = in.nextLine(); boolean ans = check(str); System.out.print(ans); } public static boolean check(String str) { Map<Character, Character> map = new HashMap<>(); map.put(')', '('); map.put(']', '['); map.put('}', '{'); Deque<Character> deque = new ArrayDeque<>(); int len = str.length(); for(int i = 0; i < len; i++) { char c = str.charAt(i); if(map.containsValue(c)) { deque.push(c); }else if(map.containsKey(c)) { if(deque.isEmpty()) { return false; } if(deque.peek() == map.get(c)) { deque.pop(); }else { return false; } } } return deque.isEmpty()?true:false; } }