標籤: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; }