華爲上機試題(java)

1、題目描述:
經過鍵盤輸入一串小寫字母(a~z)組成的字符串。請編寫一個字符串過濾程序,若字符串中出現多個相同的字符,將非首次出現的字符過濾掉。
好比字符串「abacacde」過濾結果爲「abcde」。java

    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)的順序」。git

    -- LinkedHashMap 是按加入時的順序遍歷,相似的還有LinkedHashSet。spa

 

2、題目描述:
經過鍵盤輸入一串小寫字母(a~z)組成的字符串。請編寫一個字符串壓縮程序,將字符串中連續出席的重複字母進行壓縮,並輸出壓縮後的字符串。
壓縮規則:
一、僅壓縮連續重複出現的字符。好比字符串"abcbc"因爲無連續重複字符,壓縮後的字符串仍是"abcbc"。
二、壓縮字段的格式爲"字符重複的次數+字符"。例如:字符串"xxxyyyyyyz"壓縮後就成爲"3x6yz"。blog

    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; 
    }

  

 

3、題目描述: 
經過鍵盤輸入100之內正整數的加、減、乘、除運算式,請編寫一個程序輸出運算結果字符串。
輸入字符串的格式爲:「操做數1 運算符 操做數2」,「操做數」與「運算符」之間以一個空格隔開。ip

補充說明:
一、操做數爲正整數,不須要考慮計算結果溢出的狀況。
二、若輸入算式格式錯誤,輸出結果爲「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;
    }

  

 

4、題目描述: 
求一個字符串中有沒有相同的部分,例如abcsabcvx這個字符串中相同的部分是abc,相同的部分至少應該爲2位數,若是有相同部分返回true,若是沒有返回false。get

    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;
    }
相關文章
相關標籤/搜索