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

问题是:

例如,我有这些字母:

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

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

  1. 在一连串英语单词中输出每个英语单词最后一个字母

    今天写了个能在输入一连串用空格隔开的英语单词中把每个英语单词的最后一个字母的代码,写个博客再理一理思路. 这个代码要用到字符分割函数(strtok)所以要包含string这个头文件. 首先创建一个能容 ...

  2. 【python 字母索引】找到英文句子里面每个单词最后一个字母的索引

    # -*- coding:utf-8 -*- sentence="wo ai ni zhong guo"def find_english_word_last_index(sente ...

  3. c语言单词的一个字母变换,c语言:输入一行英文字符串,把每个单词第一个字母变为大写,输出修改后的字符串知道...

    #include #include #include int main(int argc,char*argv[]) { char str[100+1]; int isfirst=1; char ch; ...

  4. 字母查重 c语言,知网查重一个字母算字吗

    知网查重一个字母算字吗?在Word中是一个单词算一个字数,而就在知网查重检测系统中是一个字母算一个字符数.这也是为什么会出现总字数多了很多,或者是总字数特别少的原因,因为系统计算的是字符数而非字数.那 ...

  5. .某学校的学生公寓有14栋楼,用A~N这14个大写字母的其中一个代表楼号,每栋楼的层数为6层,用1~6六个数字表示。每层楼有40个房间,编号为01~40。具体表示一个宿舍房间时,用1个字母加3位数字表

    软件测试--等价类划分法 1.某学校的学生公寓有14栋楼,用A-N这14个大写字母的其中一个代表楼号,每栋楼的层数为6层,用1-6六个数字表示.每层楼有40个房间,编号为01-40.具体表示一个宿舍房 ...

  6. python生成随机验证码(字母加数字的组合)

    目录 一.题目描述 二.解析 三.random用法: 四.源码 一.题目描述 写一个函数,生成指定长度的验证码,验证码由英文字母和数字构成 二.解析 此题为随机产生n位的验证码,而且要求为字母加数字的 ...

  7. php用字母数字生成用户名,请问生成字母加数字

    请教生成字母加数字 有26个字母{a-Z}和10个数字{0-9} 如果要生成8位字符的,区分大小写, 这样的排列是(26+26+10)8次方=218340105584896个,这218万亿 但相邻不能 ...

  8. java生成大小写字母加数字的随机数

    项目中用到一授权码,网上搜索资源整理后发表 public class Random {/*** 生成32位大小写加数字随机数* @param args*/public static void main ...

  9. Latex公式字母加粗

    在Latex中,公式字母加粗用语法:\boldsymbol{待添加的字母},如: \[\boldsymbol{bold} = \frac{1}{{\boldsymbol{w}_s^t\boldsymb ...

最新文章

  1. NodeJS API Process全局对象
  2. ibatis mysql like_关于ibatis中like用法的补充
  3. 日志采集框架Flume以及Flume的安装部署(一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统)...
  4. python PyQt5 QtWidgets.QWidget.size()函数 QSize
  5. 「题解」:[组合数学]:Perm 排列计数
  6. 腐蚀国内稳定服务器_工控机箱和服务器机箱区别在哪里
  7. 【Java】关于Java编程软件idea快捷键的使用
  8. python中惩罚的代码_如何只为在python中使用的实现支付依赖惩罚?
  9. cnblogs上的mysql学习心得
  10. Abaqus安装在lincense server1出错
  11. 基于javaweb+jsp的健康体检信息管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)
  12. Python反编译apk,获取各类信息
  13. 代理应用好文两篇(1)
  14. 模板Template 7
  15. 什么是serialVersionUID?serialVersionUID详解
  16. webstorm phpstorm idea 如何修改文件类型 修改文件类型关联
  17. LIBOR-OIS息差利率 伦敦银行同业拆息与隔夜指数掉期
  18. 怎样提高计算机内存,电脑物理内存不足怎么提高 电脑物理内存占用过高的解决方法...
  19. 柿饼模组 -- 实现超声波模块测距显示界面
  20. CSS3,渐变效果(线性渐变,径向渐变,重复渐变),实现各种背景效果。

热门文章

  1. Python 中引入多个模块,包的概念
  2. python列表的复制,扯一下浅拷贝与深拷贝的区别
  3. gdiplus 水印_Delphi程序的应用GDI+制作水印效果图片
  4. epub java虚拟机精讲_高级 Java 必须掌握:JVM 分析工具和查看命令,超详细!
  5. ansi c标准_C/C++的起源与发展故事,我是最牛的软件编程语言,不接受反驳
  6. 连接wifi的主机设置静态ip(固定ip)后无法上网的原因
  7. vscode 如何实时显示html文件?
  8. python 将布尔数组取反的方法 True False(b=(a==False))
  9. tensorflow_yolo-v3 Intel Realsense 视频流处理模块 opencv.videocapture()
  10. Python 计算机视觉(十三)—— 图像的傅里叶变换