Я получаю System.OutOfMemoryException
при попытке создания 6-буквенных перестановок. 5 буквенных перестановок все еще работают.
Вот код, который я использую для генерации всех перестановок:
private static List<string> getPermutations(int n,string source)
{
IEnumerable<string> q = source.Select(x => x.ToString());
for (int i = 0; i < n - 1; i++)
{
q = q.SelectMany(x => source, (x, y) => x + y);
}
return q.ToList(); // THIS IS WHERE THE ERROR HAPPENS
}
после чего я использую этот фрагмент кода для фильтрации их на основе регулярного выражения:
private static List<string> filterListByRegex(List<string> list, string regex)
{
List<string> newList = list.ToList();
for (int i = newList.Count - 1; i >= 0; i--)
{
Match match = Regex.Match(""+newList[i], regex, RegexOptions.IgnoreCase);
if (!match.Success)
{
newList.RemoveAt(i);
}
}
return newList;
}
так как на самом деле мне не нужны ВСЕ эти перестановки, есть ли способ регулярного фильтра при генерации перестановок, или я должен использовать более эффективный фрагмент кода для генерации перестановок?
Вот изображение, чтобы лучше продемонстрировать то, что я пытаюсь достичь:
Строка вертикального алфавита - это тот, который я говорю используемому коду.