棧之括號匹配問題(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(" 匹配失敗 ");
        }
    }
    
    
    
}

執行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM