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
總結
以上是生活随笔為你收集整理的php如何让字母加1,如何使用PHP以任何顺序(从12个字母组成6个单词组成一个字母)进行字符搜索?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中删除数组元素的函数,php删除数
- 下一篇: 使用php和json实现html页面,p