这是为文本(最大 80 个字符长度)生成字谜的最佳方式。 例子: 输入:狗 输出 dog dgo odg ogd gdo god
我只是在考虑回溯解决方案,但如果文本较长,这将需要一段时间。
另一个想法是构建我尝试字典中的所有单词,但问题不要求真正的单词。
有人可以指出最小时间复杂度的解决方案吗?
谢谢!
最佳答案
这是一个直接的实现,以防万一你需要一个:
IEnumerable<List<T>> Permutations<T>(List<T> items)
{
if (items.Count == 0) yield return new List<T>();
var copy = new List<T>(items);
foreach (var i in items)
{
copy.Remove(i);
foreach (var rest in Permutations(copy))
{
rest.Insert(0, i);
yield return rest;
}
copy.Insert(0, i);
}
}
IEnumerable<string> Anagrams(string word)
{
return Permutations(word.ToCharArray().ToList()).Select(x => new String(x.ToArray()));
}
关于时间复杂度的答案给了 Adithya。要理解他们的答案,您必须知道有 n! = 1*2*...*n 项的 n 个排列。我的算法证明了这一点(或基于直接证明)
关于c# - 字谜算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7187140/