1. 程式人生 > >華為上機練習題--括號匹配檢測

華為上機練習題--括號匹配檢測

題目:

輸入一串字串。當中有普通的字元與括號組成(包含‘(’、‘)’、‘[’,']'),要求驗證括號是否匹配。假設匹配則輸出0、否則輸出1.

        Smple input:dfa(sdf)df[dfds(dfd)]    Smple outPut:0


分析: 相似於括號字元匹配這類的問題, 我們能夠模擬棧的操作來進行驗證, 這樣問題就簡單了。 就是棧的操作


程式碼例如以下:

package com.wenj.test;

import java.util.ArrayList;
import java.util.List;

public class TestMatchKuohao {
    
    public static void main(String args[]){
        String strIn = "dfa(sdf)df[dfds(dfd)]";
        
        TestMatchKuohao tm = new TestMatchKuohao();
        System.out.println(tm.matchKuohao(strIn));
    }
    
    public int matchKuohao(String strIn){
        if("" == strIn || null == strIn){//空串預設不配
            return 1;
        }
        String strTemp = strIn;
        char[] strC = strTemp.toCharArray();
        
        List<Character> cL = new ArrayList<Character>();
        for(int i=0; i<strC.length; i++){
            char temp = strC[i];
            switch(temp){
            case '(':
                cL.add(temp);
                break;
            case '[':
                cL.add(temp);
                break;
            case ')': //遇到右括號則出棧
                if(cL.size() == 0){//假設棧空則說明括號匹配不上,直接返回1
                    return 1;
                }else{
                    char tempC = cL.get(cL.size()-1);
                    if('(' == tempC){
                        cL.remove(cL.size()-1); //做出棧操作
                    }else{
                        return 1;
                    }
                }
                break;
            case ']':
                if(cL.size() == 0){
                    return 1;
                }else{
                    char tempC = cL.get(cL.size()-1);
                    if('[' == tempC){
                        cL.remove(cL.size()-1);
                    }else{
                        return 1;
                    }
                }
                break;
            default:
                break;
            }
        }
        
        if(cL.size() == 0)
            return 0;
        else
            return 1;
    }
}