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