c# - 字谜算法

标签 c# algorithm anagram

这是为文本(最大 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/

相关文章:

c# - 如何使用控制代码 (ASP.NET) 保留特定于控制的 css

c# - 从 Windows 窗体应用程序发送电子邮件

c# - 在 C# 中使用数组的第一步

python - 我应该使用哪种算法来优化我的代码?

objective-c - 字谜算法 Objective-C

java - Anagrams - 我怎样才能通过以下两个测试用例

c# - LINQ Select with join 和 optional where

c++ - 如何将 map 移动到其他 map

algorithm - 我如何找到这段代码的时间和空间复杂度?

java - 拼字游戏字谜生成器