php如何让字母加1,如何使用PHP以任何顺序(从12个字母组成6个单词组成一个字母)进行字符搜索?...

我整天都在考虑这个问题,似乎无法找出一种高效而快速的内存存储方式.

问题是:

例如,我有这些字母:

e f j l n r r t t u w x(12个字母)

我正在寻找这个词

龟(6个字母)

如何使用php查找完整范围(12个单词)中的所有可能单词?

(或者使用python,如果那样可能会容易得多?)

我尝试过的事情:

>使用置换:我已经使用置换算法使所有字符串成为可能,将它们放入数组(仅长6个字符),并执行in_array来检查它是否与我的数组中的单词之一匹配有效单词(在这种情况下) ,其中包含TURTLE,但有时包含两个或三个单词).

这种计算会花费大量的内存和时间,尤其是要获得6个字符的排列.

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

希望您能为我解决这个问题,因为我真的很想解决此问题.

感谢您的所有时间:)

解决方法:

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

>处理单词列表并按长度组织单词(即长度为2,长度为3,长度为4的所有单词的列表).原因是您经常知道要搜索的单词的长度.如果要搜索长度未知的单词,可以再次搜索其他单词列表.

>将每个单独的单词列表插入tertiary search tree,这使搜索单词快得多.树中的每个节点都包含一个字符,您可以下降树以搜索单词.还有一些专门的数据结构,例如trie,但我尚未探索.

现在针对您的问题,您可以使用搜索树编写搜索功能,例如

function findWords($tree, $letters) {

// ...

}

其中tree是搜索树,其中包含您要搜索的长度的单词,而字母是有效字符的列表.在您的示例中,字母将为字符串efjlnrrttuwx.

搜索树使您可以一次搜索一个字符的单词,并且可以跟踪到目前为止遇到的字符.只要这些字符在有效字母列表中,您就可以继续搜索.在搜索树中遇到叶子节点后​​,您将找到一个现有单词,可以将其添加到结果中.如果遇到的字符不是字母(或已经被使用),则可以跳过该单词并在搜索树中的其他位置继续搜索.

我的填字游戏编辑器Palabra包含上述步骤的实现(一部分在Python中完成,但大部分在C中完成).它对于包含大约70K个单词的Ubuntu默认单词列表足够快地工作.

标签:permutation,letters,string,php,regex

来源: https://codeday.me/bug/20191101/1984605.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值