昨天去面试了一个新的公司
昨天去家公司面试,过去了后叫先写个程序,我听成了先走程序,迷茫后才知道是叫写个判断括号匹配的程序。
想了下没什么难度,应该是看怎么实现吧,看到机器上之前的代码,居然也是判断括号,不过判断情况比较多,我当时也就只是从之前的代码出发改进了下,因为太多的判断看着不爽,就把括号的匹配情况放到个等量的数组里去加加,然后判断括号自己的数量是否相等就可以了,但是想到了会出现括号位置的问题而导致的数量相同,但是实际还是不匹配的情况,但是考虑到只是叫匹配数量就没有太多的思考,写的差不多还没来得及测试就被叫去面谈了,其间还有顿工作餐,味道还不错:)
面试还算顺利,叫我去入职。
回来的公交车上又想起了这个判断括号,其实自己以前就考虑过这个问题了,用栈来实现,括号依次压入,遇到最近匹配的就弹出去,剩下就会是括号不成对的嘛,只是当时恍惚了没有想起,而且估计上机时间不会太允许就作罢。
回来后便去测试了,代码应该是可行的。
package stackStr;
import java.util.Stack;
/**
* 判断括号是否配对
* O(n^2)
* @author HideHai
*/
public class TestStr {
/**
* 定义需要判断的括号
*/
private static String testString = "()[]<>{}";
/**
* 存放数据中的括号
*/
private static Stack stk = new Stack();
/**
* 返回需要判断括号的字符数组
* @author HideHai
* @return
*/
private static char[] getTestCharArray(){
if(testString.length()==0){
System.out.println("没有括号被选择");
System.exit(1);
}
char[] reArray =testString.toCharArray();
return reArray;
}
/**
* 判断方法
* @author HideHai
* @param str
*/
private static boolean doMethod(String str){
if(str.length() == 0 ){
System.out.println("没有文本输入");
System.exit(1);
}
char[] testStrToChar = getTestCharArray();
for(int i=0,lenToi = str.length();i0 && stk.peek().equals(tempBeforeIndex)){
System.out.println("弹出括号:"+stk.pop());
}else{
stk.push(tempIndex);
}
}else{
stk.push(tempIndex);
}
}
}
}
if(stk.size()>0){
while(!stk.isEmpty()){
System.out.println(stk.pop());
}
System.out.println("括号不配对");
return false;
}else{
System.out.println("括号配对");
return true;
}
}
public static void main(String[] args) {
doMethod("hello!(my name[is hhidehai]hehe)><<>><");
}
}
Out:
弹出括号:[
弹出括号:(
弹出括号:<
弹出括号:<
<
>
括号不配对