面試題:計算字符串中各個字符出現的次數

面試題:計算字符串中各個字符出現的次數

前言

昨天同事隨口問了一道面試題:計算字符串中各個字符出現的次數,比如給定字符串 “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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章