• 栈之括号匹配问题(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(" 匹配失败 ");
            }
        }
        
        
        
    }

    执行结果:

  • 相关阅读:
    Luogu p2672 推销员 (贪心)
    HDU 1548 A strange lift (暴力搜索)
    HDU 1258 Sum it up (dfs)
    HDU 1087 FatMouse and Cheese (记忆化搜索)
    Beautiful Numbers(牛客)
    E. Product Oriented Recurrence(矩阵快速幂+欧拉降幂)
    Super A^B mod C FZU
    bitset入门 简单瞎搞题
    D. Dirty Deeds Done Dirt Cheap(思维)
    大家一起来数二叉树吧(DP)
  • 原文地址:https://www.cnblogs.com/rrttp/p/7913091.html
Copyright © 2020-2023  润新知