在Java中使用哈希映射来查找字符串中字符的频率[关闭]

Posted

技术标签:

【中文标题】在Java中使用哈希映射来查找字符串中字符的频率[关闭]【英文标题】:Using hash maps in Java to find frequency of characters in a string [closed] 【发布时间】:2020-05-22 10:36:43 【问题描述】:

我正在尝试制作一个字谜程序,其中我将哈希映射的所有键集与其值匹配。但是我的代码似乎没有计算第一个字符之外的字符的出现次数。

String a="aabbcc";
HashMap<Character,Integer> map= new HashMap<Character, Integer>();
for(int i=0;i<a.length();i++)

    if(map.containsKey(a.charAt(i)))
    
        int n= map.get(a.charAt(i))+1;
       map.put(a.charAt(i), n);
    

    else
    
        map.put(a.charAt(i), 0);
    

    System.out.println(map);

输出:

a=1, b=1, c=1

【问题讨论】:

因为你从零开始计数。 ... else map.put(a.charAt(i), 1); ... ! 【参考方案1】:

按如下方式进行:

import java.util.HashMap;

public class Main 
    public static void main(String[] args) 
        String a = "aaaabbbccd";
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();
        for (int i = 0; i < a.length(); i++) 
            if (map.containsKey(a.charAt(i))) 
                int n = map.get(a.charAt(i)) + 1;
                map.put(a.charAt(i), n);
             else 
                map.put(a.charAt(i), 1);
            
        
        System.out.println(map);
    

输出:

a=4, b=3, c=2, d=1

程序中的所有内容都是正确的,除了您输入为0 的初始计数。当您第一次将角色放入地图时,其计数应设置为1 而不是0。不是吗?

【讨论】:

【参考方案2】:

问题在map.put(a.charAt(i), 0)。那个 0 应该是 1,因为当你第一次找到一个字符时,计数是 1。

【讨论】:

【参考方案3】:

当然你会得到这个结果:)

每个字符 a、b、c 在您的字符串中出现 2 次。 现在例如,对于第一个“a”,您将进入else 分支,因为它尚未包含在您的地图中。因此a 将映射到0。然后对于字符串中的第二个“a”,您将输入 if 分支,因为键 a 已经存在于地图中。而0 将增加到1。你最终会得到a 被映射到1。 b 和 c 也一样 :)

【讨论】:

以上是关于在Java中使用哈希映射来查找字符串中字符的频率[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

iOS中的哈希表

使用正则表达式查找哈希表/字典/地图

LeetCode 451 根据字符出现频率排序[Map 最大堆 桶排序] HERODING的LeetCode之路

在哈希查找中,符号如何比字符串快?

Python - 字典查找每个字符的频率是不是很慢?

如何更改哈希映射中键的值? [复制]