面试题:计算字符串中各个字符出现的次数

面试题:计算字符串中各个字符出现的次数

前言

昨天同事随口问了一道面试题:计算字符串中各个字符出现的次数,比如给定字符串 “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

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