【问题标题】:HackerRank Sparse Arrays Challenge C#HackerRank 稀疏数组挑战 C#
【发布时间】:2022-07-12 10:28:13
【问题描述】:

有一组输入字符串和一组查询字符串。对于每个查询字符串,确定它在输入字符串列表中出现的次数。返回结果数组。

功能说明

matchingStrings 函数必须返回一个整数数组,表示字符串中每个查询字符串的出现频率。

matchingStrings 有以下参数:

string strings[n] - 要搜索的字符串数组 字符串查询[q] - 查询字符串数组

退货

int[q]:每个查询的结果数组

解决方案

List<string> strings = new List<string> { "4", "aba", "baba", "aba", "xzxb" };
List<string> queries = new List<string> { "3", "aba", "xzxb", "ab" }; 

List<int> outputList = Result.matchingStrings(strings, queries);

for (int i = 0; i < outputList.Count; i++)
{
    Console.WriteLine(outputList[i]);
}

public class Result
{
    public static List<int> matchingStrings(List<string> strings, List<string> queries)
    {
        int inputCount = 0;
        Int32.TryParse(strings[0], out inputCount);
        string[] input = strings.GetRange(1, strings.Count - 1).ToArray();
        var stringsMap = new Dictionary<string, int>();

        for (int i = 0; i < inputCount; i++)
        {
            if (stringsMap.ContainsKey(input[i]))
            {
                stringsMap[input[i]]++;
            }
            else
            {
                stringsMap.Add(input[i], 1);
            }   
        }
  
        int queryCount = 0;
        Int32.TryParse(queries[0], out queryCount);
        string[] queryStrings = queries.GetRange(1, queries.Count - 1).ToArray();
        int[] output = new int[queryCount];

        for (int i = 0; i < queryCount; i++)
        {
            if (stringsMap.ContainsKey(queryStrings[i]))
            {
                output[i] = stringsMap[queryStrings[i]];
            }
        }

        List<int> outputList = output.ToList();

        return outputList;
    }
}

该代码适用于 VS 代码中的给定示例输入。但是,当它插入 HackerRank 在线 IDE 时,它不会返回任何输出。我不明白问题可能是什么。

【问题讨论】:

  • 模板解决方案不传递整数作为第一个元素。
  • 你可能是对的。我会仔细看看的。谢谢。

标签: c# arrays list


【解决方案1】:

这是我在 C# 中的 100% 解决方案:

List<int> res = new List<int>();
    int count=0;
    for(int i=0; i<queries.Count; i++) {
    count=0;
    foreach(string s in strings) {
    if(queries[i] == s) {
    count++;
     }
    }
    res.Add(count);
    }
    return res;
    }

【讨论】:

    【解决方案2】:

    这是我在 python 中的解决方案

    def matchingStrings(strings, queries):
    hash_map=dict()
    
    results=[]
    for str in strings:
        if str in hash_map:
            hash_map[str]+=1
        else:
            hash_map[str]=1
    for q in queries:
        if q in hash_map:
            results.append(hash_map[q])
        else:
            results.append(0)
    
    return results
    

    【讨论】: