码迷,mamicode.com
首页 > 其他好文 > 详细

华为上机试题

时间:2014-08-14 23:23:06      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:style   blog   java   strong   for   ar   div   line   

一、题目描述:
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。

    public String stringFilter(String str) {
    	Map<String, Integer> map = new LinkedHashMap<String, Integer>();
    	
    	String s = "";
    	for(int i=0; i<str.length(); i++) {
    		s = String.valueOf(str.charAt(i));
    		if(map.keySet().contains(s)) 
    		    map.put(s, map.get(s)+1);
    		else 
    			map.put(s, 1);
    	}

    	String _str = "";
    	for(Map.Entry<String, Integer> entry : map.entrySet()) {
    		_str += entry.getKey(); 
        }
    	return _str;
    }

    -- 这里要注意,HashMap中元素的遍历顺序,并非按输入顺序,而是按“有利于随机查找的散列(hash)的顺序”。

    -- LinkedHashMap 是按加入时的顺序遍历,类似的还有LinkedHashSet。

 

二、题目描述:
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。

    public String stringZip(String str) { 
        String _str = "";
        
    	int i = 0;   //游标位置
    	char c;      //游标字符
    	while(i<str.length()) {    		
    		int n = 1;   //相邻相同字符的个数
    		c = str.charAt(i);
    		for(int j=i+1; j<str.length(); j++) {
    			char _c = str.charAt(j);
    			if(c==_c) {
    				n++;
    			} else {
    				break;
    			}
    		}
    		
    		if(n==1) {
    			_str += c;
    		} else if(n>1){
    			_str += String.valueOf(n) + c; 
    		}

    		i += n;	 //游标位置
    	}
    	
    	return _str; 
    }

  

 

三、题目描述: 
通过键盘输入100以内正整数的加、减、乘、除运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。

补充说明:
1、操作数为正整数,不需要考虑计算结果溢出的情况。
2、若输入算式格式错误,输出结果为“0”。

    public int arithmetic(String str) {
    	String[] strArr = str.split(" ");
    	
    	if(strArr.length!=3 || !isNumeric(strArr[0]) || !isNumeric(strArr[2])) {
    		return 0;
    	}
    	
    	String operator = strArr[1];  //运算符
    	int leftInt = Integer.valueOf(strArr[0]);   //左操作数
    	int rightInt = Integer.valueOf(strArr[2]);  //右操作数
    	
    	int i = 0;
    	if("+".equals(operator)) {
    		i = leftInt + rightInt;
    	} else if("-".equals(operator)) {
    		i = leftInt - rightInt;
    	} else if("*".equals(operator)) {
    		i = leftInt * rightInt;
    	} else if("/".equals(operator)) {
    		i = leftInt / rightInt;
    	} 
    	
    	return i; 
    }
    
    
    //判断字符串是否可转化为数字
    public static boolean isNumeric(String str){
        for (int i=0; i<str.length(); i++){   
    	    if (!Character.isDigit(str.charAt(i))){
    	        return false;
    	    }
    	}
    	return true;
    }

  

 

华为上机试题,布布扣,bubuko.com

华为上机试题

标签:style   blog   java   strong   for   ar   div   line   

原文地址:http://www.cnblogs.com/hamfy/p/3913386.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!