微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

字谜词分组算法

如何解决字谜词分组算法

完全不用理会自定义哈希函数。在任何平台上都可以使用普通的字符串哈希函数。重要的是使哈希表的关键字具有“已排序单词”的概念-单词按字母排序,因此“ car” =>“ acr”。所有字谜都有相同的“分类词”。

只需从“分类词”到“该分类词的词列表”中添加一个哈希即可。在LINQ中,这非常简单:

using System;
using System.Collections.Generic;
using System.Linq;

class FindAnagrams
{
    static void Main(string[] args)
    {
        var lookup = args.ToLookup(word => SortLetters(word));

        foreach (var entry in lookup)
        {
            foreach (var word in entry)
            {
                Console.Write(word);
                Console.Write(" ");
            }
            Console.WriteLine();
        }
    }

    static string SortLetters(string original)
    {
        char[] letters = original.tochararray();
        Array.sort(letters);
        return new string(letters);
    }
}

样品使用:

c:\Users\Jon\Test>FindAnagrams.exe man car kile arc none like
man
car arc
kile like
none

解决方法

给定一组单词,我们需要找到字谜单词并使用最佳算法单独显示每个类别。

输入:

man car kile arc none like

输出:

man
car arc
kile like
none

我现在正在开发的最佳解决方案是基于哈希表,但是我正在考虑将字谜词转换为整数值的方程式。

示例:man =>’m’+’a’+’n’,但这不会给出唯一值。

有什么建议吗?


请参见C#中的以下代码:

string line = Console.ReadLine();
string []words=line.Split(' ');
int[] numbers = GetUniqueInts(words);
for (int i = 0; i < words.Length; i++)
{
    if (table.ContainsKey(numbers[i]))
    {
        table[numbers[i]] = table[numbers[i]].Append(words[i]);
    }
    else
    {
        table.Add(numbers[i],new StringBuilder(words[i]));
    }

}

问题是如何开发GetUniqueInts(string [])方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。