首页 > 代码库 > 华为上机试题
华为上机试题
一、题目描述:
通过键盘输入一串小写字母(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; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。