2014华为校招机试高级题——if语法中的括号判断
2013-09-17 16:41
393 查看
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; } }
相关文章推荐
- 华为机试 - 判断if语句括号是否匹配
- 华为机试-判断if语句括号是否合法
- 华为2014机考题_判断if括号是否匹配_堆栈
- 华为2014机考题目_判断if括号匹配是否合法_堆栈_简单的方法- -
- 华为机试—括号匹配判断[去多余括号]
- 【机试】华为2014校招机试:多线程循环打印十次ABC
- 2014华为机试-判断输入的字符串是不是一个有效的IP地址
- 取石子游戏 (斐波那契博弈)---华为2014校招机试第三题
- 地铁换乘—华为2014校招机试样题 —Dijkstra 和 Floyd-Warshall 算法解决
- 【2014校招】华为南研所机试
- 2014华为校招机试题目总结
- HDU 2516 取石子游戏 (斐波那契博弈)---华为2014校招机试第三题
- [置顶] 华为2014校招机试
- 2014华为成都实习招聘软件类机试回忆录
- 2014华为机试,计算给定和牌麻将的番数
- 华为机试——括号匹配
- 2014华为机试西安地区B组试题
- 华为2014暑期实习生招聘机试考题回忆
- 2014华为机试,寻找丑数。
- 2014华为机试(3)