如何使用 PHP 以任意顺序进行字符搜索(12 个字母,其中 6 个字母构成一个单词)?

2024-05-11

我整天都在想这个问题,似乎无法找出一种记忆有效且快速的方法。 问题是:

例如,我有这些信: e f j l n rr t t u w x(12 个字母)

我正在找这个词 海龟(6 个字母)

如何使用 php 找到完整范围(12 个单词)中所有可能的单词? (或者使用 python,是否会容易很多?)

我尝试过的事情:

  • 使用排列:我已经使用排列算法使所有字符串成为可能,将它们放入数组中(仅 6 个字符长的字符串)并执行 in_array 来检查它是否与数组中的某个单词与有效单词匹配(在本例中,包含 TURTLE,但有时包含两个或三个单词)。 这种计算会消耗大量内存和时间,尤其是需要 6 个以上的字符进行排列时。

  • 创建一个正则表达式(我不擅长这个)。我想创建一个正则表达式来检查 12 个(输入)字符中的 6 个是否在“有效数组”中的单词中。问题是,我们不知道 12 中的哪个字母将是起始位置以及其他单词的位置。

一个例子是:http://drawsomethingwords.net/ http://drawsomethingwords.net/

我希望你能帮助我解决这个问题,因为我真的很想解决这个问题。 感谢您抽出宝贵的时间:)


我在编写填字游戏编辑器时遇到了类似的问题(例如,查找第二个位置上带有“B”的所有长度为 5 的单词)。基本上可以归结为:

  • 处理单词列表并按长度组织单词(即长度为 2、长度 3、长度 4 等的所有单词的列表)。原因是您通常知道要搜索的单词的长度。如果您想搜索长度未知的单词,您可以再次重复搜索不同的单词列表。
  • 将每个单独的单词列表插入到三级搜索树 https://en.wikipedia.org/wiki/Ternary_search_tree这使得搜索单词的速度更快。树中的每个节点都包含一个字符,您可以沿树向下搜索单词。还有一些专门的数据结构,例如trie https://en.wikipedia.org/wiki/Trie但我还没有探索过。

现在对于您的问题,您可以使用搜索树编写一个搜索函数,例如

function findWords($tree, $letters) {
   // ...
}

where tree是包含您要搜索的长度的单词的搜索树,并且letters是有效字符的列表。在你的例子中,letters将是字符串efjlnrrttuwx.

搜索树允许您一次搜索一个字符,并且可以跟踪迄今为止遇到的字符。只要这些字符在有效字母列表中,您就可以继续搜索。在搜索树中遇到叶节点后,您就找到了一个现有单词,可以将其添加到结果中。如果您遇到不在其中的角色letters(或者它已经被使用过),您可以跳过该单词并在搜索树中的其他位置继续搜索。

我的填字游戏编辑器Palabra https://bitbucket.org/svisser/palabra包含上述步骤的实现(一部分是用 Python 完成的,但大部分是用 C 完成的)。对于包含大约 70K 单词的 Ubuntu 默认单词列表来说,它的运行速度足够快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 PHP 以任意顺序进行字符搜索(12 个字母,其中 6 个字母构成一个单词)? 的相关文章

随机推荐

  • Snakemake如何在上游规则失败时执行下游规则

    抱歉 标题不好 我不知道如何最好地用几句话解释我的问题 当其中一条规则失败时 我在处理 Snakemake 中的下游规则时遇到困难 在下面的示例中 黑桃规则在某些样本上失败 这是预料之中的 因为我的一些输入文件会有问题 黑桃将返回错误 并且
  • Quartz.Net 作业存储查询

    我正在当前项目中使用 Quartz NET 创建调度程序 就我而言 所有需要创建的作业都存储在一个表中 并且有一个单独的 UI 我可以在其中添加新作业或编辑现有作业 我的问题是如何将表中的所有作业提供给 Quartz 调度程序 我是否想要查
  • 有 Google Keep API 吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Google Keep 有 API 吗 我想为 Google Keep 制作一个 Windows 8 应
  • 自动检测log4j静态初始化错误的方法

    请注意 这更像是 Bash 问题 而不是 Java 问题 请参阅下面的注释 在每个类中配置log4j时 我们执行以下操作 public class Example private static final Logger log Logger
  • 将 Foq 与 F# 函数类型结合使用

    例如 我使用 F 类型定义来防止函数之间的硬依赖 type IType1 int gt int type IType2 int gt string let func1 i int int i i let func2 i int string
  • 无法使用 jQuery 添加两个小数

    我试图将两个小数值相加 但返回的总和是纯整数 怎么了 我找不到它 欢迎任何帮助 jQuery delivery method ship select change function var cost jQuery this val jQue
  • ObjC 中的 self 是什么?我应该什么时候使用它?

    什么是self在 Objective C 中是什么意思 我应该何时何地使用它 是否类似于this在Java中 self指的是您正在使用的当前类的实例 是的 它类似于this在爪哇 如果您想对该类的当前实例执行操作 则可以使用它 例如 如果您
  • 如何禁用向左滚动?

    I got a div 元素 parent 包含多个子元素 item 我想启用滚动父元素一个方向 left OR正确的 否则什么都不会发生 看我的代码 parent scroll function gt gt gt scroll event
  • 使用 iconv 将 UTF-16BE 转换为无 BOM 的 UTF-8

    我正在尝试使用 iconv 将 UTF 16BE 编码文件 字节顺序标记 0xFE 0xFF 转换为 UTF 8 如下所示 iconv f UTF 16BE t UTF 8 myfile txt 然而 生成的输出具有 UTF 8 字节顺序标
  • Git 子模块在 Windows 上更新缓慢

    Git 子模块在 Windows 上似乎非常慢 为了测试性能 我创建了 3 个裸存储库并向它们提交了 3 条独立消息 未存储文件 然后 我将每个裸存储库作为子模块添加到新的 git 存储库中 并执行子模块更新 花费了 5 秒多的时间 当使用
  • 如何在生产中安全地更改会话 cookie 域或名称?

    我们最近意识到我们的会话 cookie 正在被写入我们网站的完全限定域名 www myapp com 例如 MYAPPCOOKIE 79D5DB83 domain www myapp com 我们希望将其切换为可以跨子域共享的cookie
  • 从Oracle表中删除重复行

    我正在 Oracle 中测试某些内容并使用一些示例数据填充表 但在此过程中我不小心加载了重复记录 因此现在我无法使用某些列创建主键 如何删除所有重复行并只保留其中一行 Use the rowid伪列 DELETE FROM your tab
  • List、IList、IEnumerable、IQueryable、ICollection,哪个返回类型最灵活?

    我之前已经在这里看到过这个问题 但我不满意我理解的完整后果 问题是使用 linq to sql 返回的数据层应该使用什么返回类型以获得最大的灵活性和查询能力 这是我读过 发现的 IEnumerable 是有限的 只允许向前读操作 IEnum
  • 更新 Azure Blob 上的 LastModified

    我正在移植代码以使用 C 中的 Azure 存储 SDK 传统上 我称其为更新修改文件的上次写入 修改时间 File SetLastWriteTimeUtc fileName lastWriteTimeUtc 要更新 blob 的上次修改时
  • 如何创建记录而不将其保存在数据库中

    我正在使用InventoryOdoo 12 的插件 但我的问题可能发生在任何模块上 在这个插件中 一个StockMove模型有一个move line ids field In the Detailed Operations对话框中 我们可以
  • Mojo 配置的自定义类型转换器?

    我需要使用自定义类型 例如LunarDate 在我的 Mojo 对象中 class MyMojo extends AbstractMojo parameter LunarDate lunarDate 我想配置参数
  • 内核与系统中的 Windows 进程

    我有一些与内核和用户模式下的 Windows 进程相关的问题 如果我有一个 hello world 应用程序和一个公开新系统调用 foo 的 hello world 驱动程序 我很好奇一旦处于内核模式 我能做什么和不能做什么 对于初学者来说
  • Sourcetree 2.1.2.5 - 显示“未提交的更改”,但没有任何待处理的内容

    我有一个以前没有遇到过的问题 即使我没有什么可提交的 并尝试将我的分支重置为 Sourcetree 显示的最新提交Uncommitted changes 根据 Atlassian 论坛的说法 通常有两个原因 您的工作目录中有很多很多未暂存的
  • 在 MySQL 表中存储用户密码的最佳 PHP 哈希方法?

    我已经阅读 Stack Overflow 问题大约 15 分钟了 每一个问题似乎都与我之前读到的问题相矛盾 Bcrypt SHA1 MD5 等 我目前对我的密码进行 MD5 但我想让我的数据库在发生泄露时更加安全 我知道这个问题已经被问了一
  • 如何使用 PHP 以任意顺序进行字符搜索(12 个字母,其中 6 个字母构成一个单词)?

    我整天都在想这个问题 似乎无法找出一种记忆有效且快速的方法 问题是 例如 我有这些信 e f j l n rr t t u w x 12 个字母 我正在找这个词 海龟 6 个字母 如何使用 php 找到完整范围 12 个单词 中所有可能的单