首页 > 代码库 > 华为上机练习题--括号匹配检测

华为上机练习题--括号匹配检测

题目:

输入一串字符串,其中有普通的字符与括号组成(包括‘(’、‘)’、‘[’,‘]‘),要求验证括号是否匹配,如果匹配则输出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;
    }
}