zoukankan      html  css  js  c++  java
  • 栈之括号匹配问题(java实现)

    假设表达式中只允许两种括号:()、{};
    正确表达顺序为:()或{}或({})或{({}{})}的形势;如{(}或(})或({)}的表达形势均不对。
    算法的设计思想:

      出现左括弧则进栈;

      出现右括弧则首先检测栈是否为空,

        若栈空则表明此右括弧多余,表达式不匹配。

        否则和栈顶数据比较,若匹配则栈顶出栈。

        否则表明表达式不匹配;

      最后若栈空,则表明匹配成功;否则表明不匹配。

    代码:

    package linklist;
    import java.util.Stack;
    
    /**
     * 此题还可以引申至配对字符符匹配问题,如单引号,双引号匹配问题。
     *
     */
    
    public class ExpStackMatching {
        
        public boolean matching(String expression)
        {
            if(expression==null||expression=="")
            {
                System.out.println( "输入表达式为空或没有输入表达式" ) ;
            }
            
            Stack<Character> stack = new Stack<Character>() ;
            
            for(int index=0 ; index<expression.length();index++)
            {
                switch(expression.charAt(index))
                {
                    case '(':
                        stack.push(expression.charAt(index)) ;
                        break ;
                    case '{':
                        stack.push(expression.charAt(index)) ;
                        break ;
                    case ')':
                        if(!stack.empty()&&stack.peek()=='(')
                        {
                            stack.pop() ;
                        }
                        break ;    
                        
                    case '}':
                        if(!stack.empty()&&stack.peek()=='{')
                        {
                            stack.pop();
                        }
                }    
            }
            
            if(stack.empty())
                return true ;
            return false ;
        }
        
        public static void main(String[] args) {
            
            String expression = "{((1+3)+2+4)+9*7}" ;
            
            ExpStackMatching oj = new ExpStackMatching() ;
            
            boolean flag = oj.matching(expression) ;
            
            if(flag)
            {
                System.out.println("匹配成功!") ;
            }
            else
            {
                System.out.println(" 匹配失败 ");
            }
        }
        
        
        
    }

    执行结果:

  • 相关阅读:
    前端部分框架
    Postman
    java intellij 写控制台程序 窗口程序
    postgresql 连接数
    CPU制造工艺 级选来决定cpu等级
    CPU 材料学才是最顶级的学科
    关于asp.net和iis的进程/线程问题,假如网站有1000个人访问,会产生多少个进程/线程啊
    io会消耗cpu吗?
    数据密集型 和 cpu密集型 event loop
    Javascript是一个事件驱动语言
  • 原文地址:https://www.cnblogs.com/rrttp/p/7913091.html
Copyright © 2011-2022 走看看