使用 HashMap 的稀疏数组

Sparse Array using HashMap

稀疏数组

有一个输入字符串集合和一个查询字符串集合。对于每个查询字符串,确定它在输入字符串列表中出现的次数。 例如,给定输入字符串=['ab','ab','abc'] 和查询=['ab','abc','bc'] 我们发现'ab' 的 2 个实例,'ab' 的 1 个实例和 'bc' 的 0 个实例。对于每个查询,我们向 return 数组添加一个元素,result=[2,1,0] .

https://www.hackerrank.com/challenges/sparse-arrays/problem?isFullScreen=true

我试过这个解决方案,但它只通过了 3 个测试用例。

static int[] matchingStrings(String[] strings, String[] queries) {
        int[] result_arr=new int[queries.length];
        HashMap<String,Integer> map=new HashMap<>();
        for(int i=0;i<queries.length;i++)
        {
            map.put(queries[i],i);
        }
        for(int i=0;i<strings.length;i++)
        {
            if(map.containsKey(strings[i]))
            {
                int index=map.get(strings[i]);
                System.out.println(index);
                result_arr[index]+=1;
            }
        }
        return result_arr;
    }

如果您的 queries 数组有重复值,它将中断。

因此,您应该为 strings 数组创建它,而不是为 queries 数组创建哈希图。这是因为对于每个查询,您需要检查该字符串在 strings 数组中出现了多少次。 当前,如果您的 queries 数组中存在重复值,则您的哈希图本身无法正确填充。

这是更新后的代码:

static int[] matchingStrings(String[] strings, String[] queries) {
        int[] result_arr=new int[queries.length];
        HashMap<String,Integer> map=new HashMap<>();
        for(int i=0;i<strings.length;i++)
        {
            if(map.containsKey(strings[i])) {
                map.put(strings[i], map.get(strings[i])+1);
            } else {
                map.put(strings[i],1);
            }
        } 
        for(int i=0;i<queries.length;i++)
        {
            if(map.containsKey(queries[i]))
            {
                result_arr[i]+=map.get(queries[i]);
            }
        }
        return result_arr;

    }