括号匹配

来源:互联网 发布:欣哥刷枪软件 编辑:程序博客网 时间:2024/06/01 08:45

今天网易机试,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 stubif(c=='('&&d==')'){return true;}if(c=='['&&d==']'){return true;}if(c=='{'&&d=='}'){return true;}return false;}}

有好的思路,请指教,直接评论吧,互相学习。

0 0