面試題:計算字符串中各個字符出現的次數
前言
昨天同事隨口問了一道面試題:計算字符串中各個字符出現的次數,比如給定字符串 “aaabbcdd”,輸出 “a3b2c1d2”。
分析
方法一:分割字符,獲取字符數組或者集合,進行分組
方法二:比如取出第一個字符 a 先,將字符串中的 a 都替換 “”,則字符串就變成 “bbcdd”,根據長度,就可以出 a 的個數;將新的字符串重複此操作,直到字符串爲 “”。
方法一:拆分
獲取字符數組或集合
// 使用 Java 原生的方法,獲取字符數組
char[] chars = string.toCharArray();
// 使用 subString 來切分,獲取字符集合
List<String> charList = new ArrayList<>();
for (int i = 0; i < string.length(); i++) {
String charString = string.substring(i, i + 1);
charList.add(charString);
}
// 使用 Guava 的 Splitter 類按長度分割
List<String> charListBySplitter = Splitter.fixedLength(1).splitToList(string);
分組
// 使用 Map 來進行分組,key 爲字符,value 爲數量
Map<String, Integer> charGroup = new TreeMap<>();
for (int i = 0; i < charList.size(); i++) {
String charString = charList.get(i);
Integer count = 1;
if (charGroup.containsKey(charString)) {
count += charGroup.get(charString);
}
charGroup.put(charString, count);
}
// 使用 Java 8 Lambda 進行分組
Map<String, List<String>> charGroupByLambda = charList.stream().collect(Collectors.groupingBy(s -> s));
方法二:替換
// 如果沒要求字符排序的話,可以直接如下操作
public void charCountByReplace(String string) {
charCountByReplace1(string);
System.out.println();
}
private void charCountByReplace1(String string) {
if (string != null && !"".equals(string)) {
String headChar = string.substring(0, 1);
String replaceString = string.replace(headChar, "");
System.out.print(headChar + (string.length() - replaceString.length()));
charCountByReplace1(replaceString);
}
}
後記
四個小例子:https://github.com/hochenchong/learnJava/blob/master/src/test/java/algorithm/CharCountTest.java,例子以直接輸出到控制檯的方式,需要返回新的字符串的話,修改一下即可。
在實踐中成長!
HochenChong
2020-05-16