栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

查找给定的最长单词

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

查找给定的最长单词

没有Java代码。您可以自己解决。

假设我们需要做很多次,这就是我要做的:

  • 我将从为字典中的每个单词(由26位组成)创建“签名”开始,其中如果单词包含一个(或多个)字母实例,则设置bit [letter]。这些签名可以编码为Java

    int

  • 然后创建一个映射,将签名映射到具有该签名的单词列表。

要使用预先计算的地图进行搜索:

  • 为要为其查找单词的字母集创建签名。

  • 然后遍历映射的键,查找其中的键

    (key & (~signature) == 0)
    。这样就为您提供了一个“可能”的简短列表,其中不包含不在所需字母集中的任何字母。

  • 遍历简短列表以查找每个所需字母的 正确编号 的单词,记录最长的匹配记录。


笔记:

  1. 虽然主要搜索大致

    O(N)
    取决于字典中的单词数,但该测试非常便宜。

  2. 这种方法的优点是需要相对较小的内存中数据结构(很可能具有良好的局部性)。这可能有助于更快的搜索。


这是加快上述

O(N)
搜索步骤的一种方法。

从上面的签名图开始,为 确实
包含特定成对字母的所有单词创建(预计算)派生图;即,一个用于包含AB的单词,一个AC,BC,…和YZ。然后,如果您要查找包含(例如)P和Q的单词,则只需扫描PQ导数图即可。这将减少

O(N)
了大约一步
26^2
......在更多内存的额外地图的成本。

可以扩展到3个或更多字母,但是缺点是内存使用量激增。

另一个潜在的调整是(以某种方式)使初始字母对的选择偏向于不经常出现的字母/对。但这增加了前期开销,该开销可能大于通过搜索较短列表而获得的(平均)节省。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452548.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号