我创建了一个字形创建应用程序,方法是在我的数据库中创建一个字形字段,其中包含按字母顺序存储的大小写较小的字符串。
例如,吸力变为cinostu,耳朵变为aer,依此类推。
我现在要做的是从搜索到的原始字形中创建子词。
例如:如何从搜索“逮捕”中提取子集单词,即“休息”和“凝视”。
发布于 2009-07-03 02:02:51
嘿,博克。我一直在尝试将你的代码改编成PHP,我有以下几点建议:
$LetterCount =数组(“a”=> 1,"b“=> 1,"c”=> 1,"d“=> 1,"e”=> 0,"f“=> 1,"g”=> 1,"h“=> 1,"i”=> 1,"j“=> 1,"k”=> 1,"l“=> 1,"m”=> 1,"n“=> 1,"o”=> 1,"p“=> 1,"q”=> 1,"r“=> 1,"s“=> 1,"t”=> 1,"u“=> 1,"v”=> 1,"w“=> 1,"x”=> 1,"y“=> 1,"z”=> 1);
$AsciiCodeLowerCaseA = 97;
for ($j = 1; $j < strlen($string); $j++) {
$CurrentLetter = $string[$j];
$AsciiCode = ord($CurrentLetter);
$AlphabetPos = $AsciiCode - $AsciiCodeLowerCaseA + 1;
$LetterCount[$AlphabetPos] = $LetterCount[$AlphabetPos] + 1;
}
我硬编码了数组声明位以节省时间。
无论如何,它似乎没有工作,并给我这个错误:注意:未定义的偏移量:1
这是我得到的错误的屏幕截图,我还为循环中的每个变量或数组添加了回显,看看你是否能理解发生了什么。
http://i42.tinypic.com/11ryz4g.png
我认为它没有正确地识别数组中的字母,因此没有正确地将数字添加到数组的末尾。
让我知道你认为我应该做什么。
发布于 2009-07-03 02:41:13
这是我以前使用过的一种方法,它使用按字母顺序排序的单词列表。
1)获取目标单词(逮捕)并对其进行排序(aerrst)。
2)然后从排序的单词中生成新的字符串,其中包含或排除每个字母。对于N个字母的单词,这会给出2**N个可能的字符串。(我不知道PHP,但可以给你伪代码,例如Python,如果你喜欢的话。)
对于您的目标单词,我们有: a,e,r,r,s,t,st,rs,rt,rst,rr,rs,rt,rst,rrs,rrt,rrst,er,er,es,et,est,ers,ert,erst,err,ers,ert,erst,errs,errt,ae,ar,ar,as,at,ast,ars,ars,art,arst,arrs,arrt,arrst,aer,aer,aes,aet,aest,aers,aert,aerst,aers,aert,aerst
3)然后根据您的排序列表检查这些字符串。出现在排序列表中的单词对应于所需的子集单词。
例如aerrst对应于完整的字谜(arrest,rarest,raster,...)
例如,空气将在你的排序列表中(凝视,泪水,...)
例如,rrs不会出现在您的排序列表中
发布于 2009-07-02 05:22:29
在原始单词的末尾添加一个空格。每次迭代中,空格在字母中间结束,您将得到两个单词。然后你可以测试这两个词。如果空格位于迭代模式的开头或结尾,请将其修剪掉并测试该单词。
https://stackoverflow.com/questions/1074265
复制