【发布时间】:2017-06-03 23:34:59
【问题描述】:
我见过很少的 C# 中字符串变体的实现,但它们都没有对它们的长度有任何限制。不幸的是,我无法修改它们以实现我的目标,例如
为:
string = "ABCD" and variationLength = 2
生成新字符串:
AB, AC, AD, BA, BC, BD, CA, CB, CD, DA, DB, DC
我正在寻找这个 Python 的 itertools.permutations 实现,但在 C# 中。 (https://docs.python.org/3/library/itertools.html#itertools.permutations)
在 C# 中是否有类似的东西?如果没有,那么最简单的实现方法是什么?
编辑_2: 到目前为止,我想出了一个想法,列出给定字符串的所有唯一字符,然后从中获取变体
static void PrintAllKLengthPerm(string str, int k)
{
int n = str.Length;
PrintAllKLengthPermRec(str, "", n, k);
}
// The main recursive method to print all possible strings of length k
static void PrintAllKLengthPermRec(string str, String prefix, int n, int k)
{
// Base case: k is 0, print prefix
if (k == 0)
{
Console.WriteLine(prefix);
return;
}
// One by one add all characters from str and recursively
// call for k equals to k-1
for (int i = 0; i < n; ++i)
{
// Next character of input added
String newPrefix = prefix + str[i];
// k is decreased, because we have added a new character
PrintAllKLengthPermRec(str, newPrefix, n, k - 1);
}
}
static void Main(string[] args)
{
string str = "ABCD";
int permLen = 2;
//get all unique characters in string
string uniqStr = new String(str.Distinct().ToArray());
// Print all possible strings of length permLen out of uniqStr characters
PrintAllKLengthPerm(uniqStr, permLen);
}
但是我正在寻找更优化和更有效的解决方案
【问题讨论】:
-
请展示你的作品。到目前为止,您尝试过什么?
-
@Soviut 已编辑..
-
@JayDouble 这没有展示你的作品。实际尝试并显示代码,以便我们为您提供帮助。我了解您是新来的,所以我想澄清一下 SO 不是一个建议论坛,也不是一个为您编写代码的地方;我们帮助您解决代码问题。
标签: c# string permutation string-length