如何检查单词是否由数组中的其他字符串组成

时间:2012-01-09 17:07:28

标签: c# arrays string

我想检查字符串是否是从给定字符串集中的另外两个字符串构建的。

例如,给定以下数组:

var arr = new string[] { "b", "at", "bat", "ct", "ll", "ball", "ba"};

我只想返回“bat”“ball”

那是因为它们可以由数组中的其他两个元素组成,如下所示:

"bat" = "b" + "at"
"ball" = "ba" + "ll"

我尝试过使用foreach循环,但我并没有完全正确。 任何帮助将不胜感激。

我做过像

这样的事情
foreach(var x in list)
{
    if (dataaccess.IsThreeCharacters(x))
    {
        for (int i = 0; i < arr.Length; i++)
        {
            for (int j = i; j < arr.Length; j++)
            {
                if(x == arr[i] + arr[j])
                {
                    newlist.Add(x);
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:5)

这将为您提供可以从序列中的其他值组成的所有值:

var values = new HashSet<string>(new[] { "b", "at", "bat", "ct", "ll", "ball", "ba" });

var compositeValues =
    from value in values
    from otherValue in values
    where value != otherValue
    let compositeValue = value + otherValue
    where values.Contains(compositeValue)
    select compositeValue;

注意使用HashSet<string>,它提供O(1)查找性能,而不是数组的O(N)。

答案 1 :(得分:1)

虽然我没有保证提高效率,但这应该有效!

static void Main(string[] args)
    {
        var arr = new string[] { "b", "at", "bat", "ct", "ll", "ball", "ba" };

        var composites = from s in arr
                         from lhs in arr
                         from rhs in arr
                         where s == string.Concat(lhs, rhs)
                         select s;

        foreach (var composite in composites)
        {
            Console.WriteLine(composite);                
        }
        Console.ReadLine();

    }