C# 返回第一个最长字符串,该字符串由c中数组中的n个连续字符串组成

C# 返回第一个最长字符串,该字符串由c中数组中的n个连续字符串组成,c#,linq,C#,Linq,我在采访中得到了这个问题: 我得到了一个字符串数组strarr和一个整数k。我的任务是返回第一个最长的字符串,该字符串由数组中的k个连续字符串组成 规则:n是字符串数组的长度,如果n=0或k>n或k则在LINQ中缺少用于删除重复项的.Distinct调用 public static String LongestConsec(string[] strarr, int k) { string final = String.Join("", strarr.Distinct()

我在采访中得到了这个问题:

我得到了一个字符串数组strarr和一个整数k。我的任务是返回第一个最长的字符串,该字符串由数组中的k个连续字符串组成

规则:n是字符串数组的长度,如果n=0或k>n或k则在LINQ中缺少用于删除重复项的.Distinct调用

public static String LongestConsec(string[] strarr, int k)
{
    string final = String.Join("", 
        strarr.Distinct()                       // Remove Duplicates
              .OrderByDescending(s => s.Length) // Order by Length
              .Take(k)                          // Take from List
    );

    return final;
} 
修改后,您将获得预期的输出:

string target = LongestConsec(new string[] { "zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"}, 2);
// target = "abigailtheta"
但您仍然缺少已完成规则的IF案例:

如果n=0或k>n或k您在LINQ中缺少一个.Distinct调用来删除重复项

public static String LongestConsec(string[] strarr, int k)
{
    string final = String.Join("", 
        strarr.Distinct()                       // Remove Duplicates
              .OrderByDescending(s => s.Length) // Order by Length
              .Take(k)                          // Take from List
    );

    return final;
} 
修改后,您将获得预期的输出:

string target = LongestConsec(new string[] { "zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"}, 2);
// target = "abigailtheta"
但您仍然缺少已完成规则的IF案例:


与Smartis讨论后,如果n=0或k>n或k:

public static String LongestConsec(string[] strarr, int k) =>
    String.Join("", 
        strarr.Distinct() // note: this won't change order
              .Select((s, idx) => (s, idx)) // store initial index
              .OrderByDescending(x => x.s.Length) // longest words first
              .Take(k)
              .OrderBy(x => x.idx) // restore original order
              .Select(x => x.s));

与Smartis讨论后:

public static String LongestConsec(string[] strarr, int k) =>
    String.Join("", 
        strarr.Distinct() // note: this won't change order
              .Select((s, idx) => (s, idx)) // store initial index
              .OrderByDescending(x => x.s.Length) // longest words first
              .Take(k)
              .OrderBy(x => x.idx) // restore original order
              .Select(x => x.s));

这是你的作业还是我们的作业?这是你的作业还是我们的作业?你不能应用order by,因为它会更改此处的输出。像[xyz,Amit1234,mp]应该是XYZAMIT1234XYZ而不是Amit1234xyz。@AmitKumar哪里说排序很重要?@AmitKumar这是合理的期望,但OP没有提到。缺乏对问题的正确描述使问题变得困难。是的@AmitKumar是正确的。。我只想要那个输出。Cmon,Select into tuple,order by word,take,order back by initial index,string.Join。。没什么大不了的,您不能应用order by,因为它将更改此处的输出。像[xyz,Amit1234,mp]应该是XYZAMIT1234XYZ而不是Amit1234xyz。@AmitKumar哪里说排序很重要?@AmitKumar这是合理的期望,但OP没有提到。缺乏对问题的正确描述使问题变得困难。是的@AmitKumar是正确的。。我只想要那个输出。Cmon,Select into tuple,order by word,take,order back by initial index,string.Join。。没什么大不了的