今天网易机试,10个单选,10个多选,3个简单,2个编程题,,,单选考的到还是正常,都是java的基础知识,感觉好不错,看到多选题就有点方,,,多选是总结了几个知识点就是JVMjava虚拟机的理解,Linux命令,数据库,计算机网络http的知识,虽然一直在使用java语言写android,但是这些知识可能也是必须掌握的内容吧,有时间还是要多看看这方面的书,查漏补缺。
至于编程题,最近在牛客网,华为OJ上连做了几天的编程题,基本还行吧,总得来说,很喜欢编程通过编译器显示恭喜通过的感觉,感觉有点爱上了它。
网易的两个编程题,一个是清单排序,一个是括号匹配
只会做括号匹配,清单排序在群里也没有要到代码。
输入一行字符串,只包括“(”“)”“[”“]”“{”“}”,六种符号,判断输出的符号是否匹配,比如(){[]}
匹配,([}]不匹配
思路:这题显然用栈去做,如果是左括号直接进栈,如果是右括号,弹出栈顶,判断是否匹配
代码:
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
while(in.hasNext()){
Stack<Character> stack=new Stack<Character>();
String s=in.nextLine();
int flag=0;
//stack.push('#');
String s1="([{";
String s2=")]}";
char[] chars=s.toCharArray();
if(chars.length%2==0){//奇数肯定不匹配
for(int i=0;i<chars.length;i++){
int n1=s1.indexOf((chars[i]))+1;//是左括号直接进栈
if(n1!=0){
stack.push(chars[i]);
}
int n2=s2.indexOf((chars[i]))+1;//如果是右括号,弹出栈顶,进行匹配,成功flag=1,不成功flag=0退出
if(n2!=0){
char c=stack.pop();
if(Match(c,chars[i])){
flag=1;
}
else{
flag=0;break;
}
}
}
}
if(flag==1){
System.out.println("YES");
}
else
System.out.println("NO");
}
}
private static boolean Match(char c, char d) {
// TODO Auto-generated method stub
if(c=='('&&d==')'){
return true;
}
if(c=='['&&d==']'){
return true;
}
if(c=='{'&&d=='}'){
return true;
}
return false;
}
}
有好的思路,请指教,直接评论吧,互相学习。