括号匹配

  |   0 评论   |   0 浏览

栈的应用,比如平时用的word等文档中撤销功能,可以想想。

package club.wujingjian;

import java.util.Scanner;

public class Stack {

    /**
     * 栈结构
     * 输入一堆括号,看是否括号符合匹配
     * (a(b)c) 匹配
     * (((fd))()) 不匹配
     * (a(b)c)) 不合法
     * 思路:
     * 栈是先进后出的
     * 如果遇到左括号   进栈处理
     * 如果遇到又括号   判断栈是否为空,不为空则出栈一下;如果为空,说明当前右括号无匹配的左括号(判定为不合法)
     * 所有输入都遍历完了,判断栈是否为空,如果为空则说明合法匹配,否则说明括号非成对出现.
     * @param args
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String inputStr = scanner.nextLine();
        StackData data = new StackData(inputStr.length());
        for (int i = 0; i < inputStr.length(); i++) {
            String tmp = inputStr.charAt(i)+"";
            if (tmp.equals("(")) {
                data.push(tmp);
            } else if (tmp.equals(")")) {
                if (!data.isEmpty()) {
                    data.pop();
                } else {
                    System.out.println("不合法的括号匹配");
                    return;
                }
            }
        }
        if (data.isEmpty()) {
            System.out.println("合法");
        } else {
            System.out.println("不合法");
        }
    }

    static class StackData {
        private String[] items;
        private int count = 0;

        public StackData(int length){
            items = new String[length];
        }

        public void push(String item) {
            items[count++] = item;
        }

        public void pop (){
            return items[--count];
        }

        public boolean isEmpty(){
            return count ==0;
        }

        public String getTopElement(){
            int t = count;
            return items[t-1];
        }

    }
}


标题:括号匹配
作者:码农路上
地址:http://wujingjian.club/articles/2020/04/13/1586763835836.html