华为上机练习题--括号匹配检測
题目:
输入一串字符串。当中有普通的字符与括号组成(包含‘(’、‘)’、‘[’,']'),要求验证括号是否匹配。假设匹配则输出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;
}
}