Реализация метода, который с заданной строкой генерирует все возможные разделы, которые являются палиндромом, с использованием методов Linq - PullRequest
0 голосов
/ 18 июня 2020

Я даже не знаю, с чего начать, например, какие методы из Linq использовать, но у меня есть пример.

Если строка будет "xxyxxz", это будет вывод (хотя и не обязательно в этом порядке):

x x y x x z xx xx xyx xxyxx

Кто-нибудь знает, как это решить?

1 Ответ

3 голосов
/ 18 июня 2020

Если строка не очень длинная, вы можете попробовать перебор : перечислить все подстроки и отфильтровать палиндромы. Давайте для этого реализуем чистый Linq :

  using System.Linq;

  ...

  string source = "xxyxxz";

  var result = Enumerable
    .Range(1, source.Length)                 // all substrings' lengths
    .SelectMany(length => Enumerable         // all substrings 
       .Range(0, source.Length - length + 1)
       .Select(i => source.Substring(i, length)))
    .Where(item => item.SequenceEqual(item.Reverse())) // Linq to test for palindrome
    .ToArray(); // Let's have an array of required substrings

  // Let's have a look at the result:
  Console.Write(string.Join(" ", result));

Результат:

  x x y x x z xx xx xyx xxyxx
...