zoukankan      html  css  js  c++  java
  • 华为上机试题(java)

    一、题目描述:
    通过键盘输入一串小写字母(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;
        }
    

      

    四、题目描述: 
    求一个字符串中有没有相同的部分,例如abcsabcvx这个字符串中相同的部分是abc,相同的部分至少应该为2位数,如果有相同部分返回true,如果没有返回false。

        public boolean hasSameSubString(String str) {
        	int i = 0;
        	int length = str.length();  
        	while(i<length){
        		for(int j=2; j<length-i; j++) {
        			String s1 = str.substring(i, i+j);        //被包含字符串
        			String s2 = str.substring(i+j, length);   //包含字符串
    
        			if(s1.length()<=s2.length() && s2.indexOf(s1)!=-1){  //判断条件
        				return true;
        			}
        		}
                i++;
        	}
        	
        	return false;
        }
    

      

  • 相关阅读:
    I2C驱动程序
    3.4.2内核下的I2C驱动
    ARM Linux bootloader笔记
    将博客搬至CSDN
    《淘宝技术这十年》读后感
    《华为研发》2读后感
    《大数据》涂子沛【3.0升级版】读后感
    Cadence画封装的步骤
    Cadence PCB层的概念
    fPLL结构及动态配置
  • 原文地址:https://www.cnblogs.com/hamfy/p/3913386.html
Copyright © 2011-2022 走看看