Java 使用HashMap的稀疏数组

Java 使用HashMap的稀疏数组,java,arrays,data-structures,collections,maps,Java,Arrays,Data Structures,Collections,Maps,稀疏阵列 有一组输入字符串和一组查询字符串。对于每个查询字符串,确定它在输入字符串列表中出现的次数。 例如,给定输入字符串=['ab'、'ab'、'abc']和查询=['ab'、'abc'、'bc'],我们会找到'ab'的2个实例、'ab'的1个实例和'bc'的0个实例。对于每个查询,我们向返回数组中添加一个元素,result=[2,1,0] 我尝试了这个解决方案,但它只通过了3个测试用例 static int[] matchingStrings(String[] strings, Strin

稀疏阵列

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

我尝试了这个解决方案,但它只通过了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;
    }
静态int[]匹配字符串(字符串[]字符串,字符串[]查询){
int[]result_arr=new int[querys.length];
HashMap=newHashMap();

对于(int i=0;i当您的
查询
数组具有重复值时,它将中断

因此,您应该为
字符串
数组创建hashmap,而不是为
查询
数组创建hashmap。这是因为对于每个查询,您需要检查字符串在
字符串
数组中存在的时间。
当前,如果
查询
数组中存在重复值,则hashmap本身无法正确填充

以下是更新的代码:

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;

    }
静态int[]匹配字符串(字符串[]字符串,字符串[]查询){
int[]result_arr=new int[querys.length];
HashMap=newHashMap();

对于(inti=0;i,在算法中使用以下输入:strings={“ab”,“ab”,“abc”}和querys={“ab”,“ab”}它输出2和0,但它必须是2和2,我认为@emil。谢谢,我得到了它。而不是(inti=0;i