2014华为校招机试高级题——if语法中的括号判断

http://blog.csdn.net/wy4649/article/details/11725073

package com.huawei.job;
 
import java.util.ArrayList;
import java.util.Scanner;
 
public class IfJudge {

    public static void main(String[] args) {
       StringBuffer input = new StringBuffer();
      
       Scanner in = new Scanner(System.in);
       input.append(in.nextLine());
      
       System.out.println(new IfJudge().judge(input));
    }
    //判断if语法:输入if语句没有嵌套,只需要判断括号是否使用正确
    private  StringBufferjudge(StringBuffer sb) {
       //保存答案
       StringBuffer answ = new StringBuffer();
       int leftMax = 0;  //返回左边括号数
       int rightMax = 0; //返回右边括号数
       int left = 0;     //暂存左边括号
       int right = 0;       //暂存右边括号
       //新建一个栈
       Stack stack = new Stack();
       //把括号入栈
       boolean flag = true;  //判断是否正在输入字符或字符串
       for(int i = 0; i < sb.length(); i++) {
           if(sb.charAt(i) == '\'' || sb.charAt(i) == '\"') {
              if(flag)
                  flag = false;
              else
                  flag = true;
              continue;
           }
           //不是字符串或字符中的括号才允许入栈
           if(flag)
              if(sb.charAt(i) == '(' || sb.charAt(i) == ')')
                  stack.push(sb.charAt(i));
       }
       char tem;
       char outer = stack.pop(); //弹出第一个括号
       if(outer != ')')  //第一个括号不是右括号则语法错误
           return sb.append("WRONG");
       right++;
       rightMax++;
       //弹栈并判断
       while((tem = stack.pop()) != 0) {  //栈中还有括号则循环
           if(tem == '(') {  //弹出左括号
              left++;
              leftMax++;
           }
           else { //弹出右括号
              right++;
              rightMax++;
           }
           if(right > 0 && left > 0) { //弹出了左括号和右括号开始判断
              if(right > left) {       //正常情况下,右括号始终会大于左括号,直到最外层括号弹出
                  right -= left;
                  left = 0;
              }
              if(right == left) {      //正确情况下,左右括号数相同,说明最外层括号已弹出
                  if(stack.pop() == 0) {   //如果括号已全部弹出,说明语法正确
                     return answ.append("RIGHT" + leftMax + " " + rightMax);
                  }
                  else   //括号未弹出完毕,语法错误
                     return answ.append("WRONG");
              }
           }
       }
       //未能正确弹出,则为语法错误
       return answ.append("WRONG");
    }
}
 
class Stack {
    //栈空间为一个字符型的链表
    ArrayList<Character> chs = new ArrayList<Character>();
   
    //入栈
    public void push(char c) {
       chs.add(c);
    }
    //出栈
    public char pop() {
       if(chs.size() > 0) {
           char c = chs.get(chs.size() - 1);
           chs.remove(chs.size() - 1);
           return c;
       }
       return 0;
    }
}
 


华为校招机试是指华为公司面向应届大学毕业生进行的一系列招聘流程机试环节。此机试华为公司用于评估应聘者计算机相关知识和技术能力的一种方式。 历年来,华为校招机试在csdn(国软件开发者社区)上引起了广泛讨论和关注。许多参与过华为校招机试的应聘者在csdn上分享了一些他们的经历和心得体会。他们多数认为,华为校招机试难度较高,考察面较广,需要对计算机基础知识、算法和数据结构、操作系统、网络等方面有较扎实的掌握和理解。 从历年的csdn帖子,我们可以看到华为校招机试目的类型多样,不仅包括单选、多选、填空等传统型,还可能有编程、算法等需要应聘者进行实际编程实现的目。应聘者需要具备较强的编程和问解决能力,能够灵活运用所学知识,快速分析问并给出正确解答。 除了知识和技术的考察,华为校招机试还重视应聘者的综合素质和团队协作能力。有些考可能涉及到实际工作场景或项目实施情况,要求应聘者积极思考、利用团队资源进行解决,并且能够对所给问进行全面分析和合理回答。 综上所述,历年华为校招机试在csdn上的讨论主要集目类型、难度和要求上。参与华为校招机试的应聘者需要具备扎实的计算机基础知识、编程能力和问解决能力,同时还要在团队协作和综合素质方面有一定优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值