在字符串数组中找到两个字符串,它们的长度一起等于6

时间:2016-03-15 13:57:35

标签: c# algorithm

我有什么:

string[] array = new string[] { "Hello", "Please", "Help", "Me", "Thanks" };

现在我希望过滤此数组以找到两个长度一起等于6的字符串: { "Help", "Me" }

感谢。

抱歉我的英语不好。

2 个答案:

答案 0 :(得分:1)

可以在单个LINQ查询中完成......

array = array.Where(o => 6 - o.Length >= 0 && array.Any(n => n.Length == 6 - o.Length)).ToArray();

答案 1 :(得分:0)

您可以按字符串的长度对array进行排序,然后从第一个字符串(min = 0)和最后一个字符串max = array.Length - 1开始搜索。

如果长度之和小于6,则提前min索引。 如果长度之和大于6,则减少max索引。 如果长度的总和等于6,那么你就有了单词。

如果min索引达到max索引,那么就没有单词。

public string[] Words(string[] array)
{
    var sorted = array.OrderBy(s => s.Length).ToArray();

    int min = 0;
    int max = sorted.Length - 1;

    while (min < max)
    {
        int length = sorted[min].Length + sorted[max].Length;

        if (length < 6) min++;
        else if (length > 6) max--;
        else return new string[] { sorted[min], sorted[max] };
    }

    return null;
}