Как проверить, состоит ли слово из других строк в массиве - PullRequest
2 голосов
/ 09 января 2012

Я хочу проверить, построена ли строка из двух других строк в данном наборе строк.

Например, с учетом следующего массива:

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 ]

5 голосов
/ 09 января 2012

Это даст вам все значения, которые могут быть составлены из других значений в последовательности:

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 голос
/ 09 января 2012

Это должно работать, хотя я не ручаюсь за эффективность!

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();

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...