JS、Python 和 Java 4 的学习算法:如何返回字符串中最常用的字符?

首先,我引用今天的问题:

---方向
给定字符串,返回字符串中最常用的字符。
---示例
maxChar(“ abcccccccd”)===“ c”
maxChar(“ apple 1231111”)===“ 1”

JavaScript:

<span style="color:#f8f8f2"><span style="color:#eff0f9"><code>function maxChar(str) {
    const charMap = {};
    let max = 0;
    let maxChar = '';

    for (let char of str) {
        if (charMap[char]) {
            charMap[char]++
        } else {
            charMap[char] = 1;
        }
    }

    for (let char in charMap) {
        if (charMap[char] > max) {
            max = charMap[char];
            maxChar = char;
        }
    }

    return maxChar;
}
</code></span></span>

Stephen将第一个for循环重写为:

<span style="color:#f8f8f2"><span style="color:#eff0f9"><code>    for (let char of str) {
        charMap[char] = charMap[char] + 1 || 1;
    }
</code></span></span>

这是可能的,因为anObject['nonexistentKey']回报率undefinedundefined + 1回报率NaN,这是falsy。

Python:

<span style="color:#f8f8f2"><span style="color:#eff0f9"><code>def max_char(str):
    char_map = {}
    max = 0
    max_char = ''

    for char in str:
        char_map.setdefault(char, 0)
        char_map[char] += 1

    for char in char_map:
        if char_map[char] > max:
            max = char_map[char]
            max_char = char

    return max_char
</code></span></span>

在Python中,您不能char_map[char] += 1像在JS中那样尝试,因为如果密钥不存在,它将抛出KeyError。

更简洁地说:

<span style="color:#f8f8f2"><span style="color:#eff0f9"><code>def max_char(str):
    char_map = {}

    for char in str:
        char_map.setdefault(char, 0)
        char_map[char] += 1

    return max(char_map, key=char_map.get)
</code></span></span>

来源:https : //stackoverflow.com/questions/268272/getting-key-with-maximum-value-in-dictionary
max(char_map, key=char_map.get)与相同max(char_map.keys(), key=char_map.get)
key=char_map.get需要在字典中找到最大的(键,值)元组对。max({'a': 2, 'b': 1})返回“ b”。

Java:

<span style="color:#f8f8f2"><span style="color:#eff0f9"><code>import java.util.HashMap;
import java.util.Map;

public static char maxChar2(String str) {
    Map<Character, Integer> charMap = new HashMap<>();

    for (char chr : str.toCharArray()) {
        Integer chrCount = charMap.get(chr);
        if (chrCount == null) {
            chrCount = 0;
        }
        charMap.put(chr, chrCount + 1);
    }

    int max = 0;
    char maxChar = '\0';

    for (Map.Entry<Character, Integer> entry : charMap.entrySet()) {
        int value = entry.getValue();
        if (value > max) {
            max = value;
            maxChar = entry.getKey();
        }
    }

    return maxChar;
}
</code></span></span>

使用 Stream:

<span style="color:#f8f8f2"><span style="color:#eff0f9"><code>public static char maxChar(String str) {
    Map<Character, Long> charMap = str.chars()
            .mapToObj(i -> (char) i)
            .collect(Collectors.groupingBy(
                    c -> c, Collectors.counting()));

    return charMap.entrySet().stream()
            .collect(Collectors.groupingBy(
                    Map.Entry::getValue,
                    TreeMap::new,
                    Collectors.mapping(
                            Map.Entry::getKey, Collectors.toList())))
            .lastEntry()
            .getValue()
            .get(0);
}
</code></span></span>

return语句可以变得更简单:

<span style="color:#f8f8f2"><span style="color:#eff0f9"><code>    return charMap.entrySet().stream()
            .max(Map.Entry.comparingByValue())
            .get()
            .getKey();</code></span></span>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值