括号匹配

编写一个程序,用以判断字符串中的括号是否匹配。

所谓的匹配,是指左右括号必须相互呼应(同种类型),可以嵌套,但不能交叉。

思想:

  遇到左括号时,进栈;

  遇到右括号时,判断栈是否为空,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;
     }    
}

 

  

posted on 2020-07-04 13:44  Jain_Shaw  阅读(209)  评论(0编辑  收藏  举报

导航