C# score each is worth和char是两个字典中最值得使用的字符列表,您似乎在反向使用这两个字典,在键中查找值。SortedDictionary Class=>为此键必须是唯一的。如果要添加相同的键,请使用SortedList。什么是字母点?@

C# score each is worth和char是两个字典中最值得使用的字符列表,您似乎在反向使用这两个字典,在键中查找值。SortedDictionary Class=>为此键必须是唯一的。如果要添加相同的键,请使用SortedList。什么是字母点?@,c#,.net,dictionary,C#,.net,Dictionary,score each is worth和char是两个字典中最值得使用的字符列表,您似乎在反向使用这两个字典,在键中查找值。SortedDictionary Class=>为此键必须是唯一的。如果要添加相同的键,请使用SortedList。什么是字母点?@Sadiq,letterpoints是保存每个字母值的字典,其中int是每个字母值的分数,char是每个字母值的字符列表,而char似乎与这两个字典相反,查找某个值的键。SortedDictionary类=>为此键必须是唯一的。如果要添加同一个



score each is worth和char是两个字典中最值得使用的字符列表,您似乎在反向使用这两个字典,在键中查找值。SortedDictionary Class=>为此键必须是唯一的。如果要添加相同的键,请使用SortedList。什么是
字母点
?@Sadiq,letterpoints是保存每个字母值的字典,其中int是每个字母值的分数,char是每个字母值的字符列表,而char似乎与这两个字典相反,查找某个值的键。SortedDictionary类=>为此键必须是唯一的。如果要添加同一个键,请使用SortedList。没有什么比使用
O(n log n)
操作来执行
O(n)
作业更好的方法了。如果要在
O(n)中添加,最好的方法是
是使用键值对自身跟踪循环中的最大值并进行更新。@Sadiq如何确保它打印第一个输入的单词并检查单词是否包含提供的字母?能否显示一个您想要的输出示例?我不确定我是否理解您。@Sadiq因为(word1)11 first(word2)这些(单词3)可以(单词4)提供字母(这是期望的结果(console.WriteLine()),但它也需要覆盖如果倍数相等,那么第一个是打印的单词没有什么比使用
O(n log n)
操作来执行
O(n)更简单的了
job。如果你想在
O(n)中完成,最好的方法就是
是使用键值对自身跟踪循环中的最大值并进行更新。@Sadiq如何确保它打印第一个输入的单词并检查单词是否包含提供的字母?能否显示一个您想要的输出示例?我不确定我是否理解您。@Sadiq因为(word1)11 first(word2)这些(word3)可以(word4)提供字母(这是所需的结果(console.WriteLine()),但它也需要覆盖如果多个相等,那么第一个是打印的单词当我尝试实现这一点时,我在两个条目上都出现了错误。Orderby(表示它不包含Orderby的定义)关于var归一化()说不能从变成char@TravisJeffery啊,是的,我手头没有编译器。通过编辑,它应该可以工作。我仍然收到可用字母lineAs粘贴的错误,它使用VS 2015作为控制台应用程序进行编译。您可以发布错误吗?。未处理的异常:System.ArgumentNullException:值不能为null。参数名称:source我正在使用CODINGAME当我尝试实现这个时,我在entry.Orderby(表示它不包含Orderby的定义)和var normalized()上都出现了错误说不能从变成char@TravisJeffery啊,是的,我手头没有编译器。通过编辑,它应该可以工作。我仍然收到可用字母lineAs粘贴的错误,它使用VS 2015作为控制台应用程序进行编译。您可以发布错误吗?。未处理的异常:System.ArgumentNullException:值不能为null。参数名称:source我在编码我
    Dictionary<string, int> wordHolder = new Dictionary<string, int>();



    int N = int.Parse(Console.ReadLine());
    for (int i = 0; i < N; i++)
    {
        string W = Console.ReadLine();


        char[] splitWord = W.ToCharArray();
        Console.Error.WriteLine(W);


        int points = splitWord.Sum(c => letterPoints.First(kvp => kvp.Value.Contains(c)).Key);
        wordHolder.Add(W, points);
        Console.Error.WriteLine(points);

    }
    string LETTERS = Console.ReadLine();
    Console.Error.WriteLine(LETTERS);
wordHolder.OrderByDescending(x => x.Value).First();
wordHolder.OrderBy(x => x.Value).Last();
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication9
{
  internal static class Program
  {
    private static void Main()
    {
      //  --- building up the data so the next (repeated) steps are efficient: ---

      // your words and points
      var wordHolder = new Dictionary<string, int>();

      // INSERT DATA INTO wordHolder HERE

      // create a dictionary where you can access all words and their points 
      // efficiently by the letters you have available:
      var efficientAccessByLetters = wordHolder.Select(entry =>
                                                new
                                                {
                                                  Index = new string(entry.Key.OrderBy(c => c).ToArray()),
                                                  Word = entry.Key,
                                                  Points = entry.Value
                                                })
                                                .GroupBy(x => x.Index)
                                                .ToDictionary(x => x.Key,
                                                              x => x.OrderByDescending(p => p.Points).ToList());

      //  --- Repeat this steps as many times as you like: ---

      while (true)
      {
        Console.WriteLine("Enter letters available:");

        // get letters that you want to build he best word from:
        var availableLetters = Console.ReadLine();

        // normalize the letters for fast index search by sorting them
        var normalized = new string(availableLetters.OrderBy(c => c).ToArray());

        if (!efficientAccessByLetters.ContainsKey(normalized))
        {
          Console.WriteLine("Sorry, no matching words found.");
        }
        else
        {
          // find all words and their respective points by index access
          var wordsThatMatchLetters = efficientAccessByLetters[normalized];

          // as words are sorted by points, just get the first
          var best = wordsThatMatchLetters.First();

          // output
          Console.WriteLine("Best Match: {0} for {1} points", best.Word, best.Points);
        }
      }
    }
  }
}
 public static string High(string s)
 {
    return s.Split(' ').OrderByDescending(a => a.Select(b => b - 96).Sum()).Last();
 }