括号匹配

今天网易机试,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;
	}

}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值