我正在做一个游戏项目,其中我们必须用给定的字母集动态地形成单词......给定的字母集也可能包含重复的......在形成单词时,我们可以使用给定字母集中的字母任意次数(比如两次或三次)...帮助我用算法从给定的集合中形成所有可能的有意义的单词
谢谢大家
我正在做一个游戏项目,其中我们必须用给定的字母集动态地形成单词......给定的字母集也可能包含重复的......在形成单词时,我们可以使用给定字母集中的字母任意次数(比如两次或三次)...帮助我用算法从给定的集合中形成所有可能的有意义的单词
谢谢大家
简单的方法是创建所有可能的字母顺序,然后将每个字母与您的字典进行比较。
您可以通过将字典存储在便于快速查找的数据结构中来稍微改进它。(哈希表、树等)我一直想实现一个 28 进制树来快速访问字典单词,但还没有开始。
很多个月前,我为填字游戏求解器做了类似的事情。我基本上拿了一个字典文件并对其进行了修改,使其看起来像:
aardvark:aaadkrr
albatross:aablorsst
然后,对于给定的一组字母,我可以对它们进行排序并使用类似的东西:
grep ':{sorted letters}$' mywords.txt | sed 's/:.*$//'
这会给我候选词。
如果您正在寻找可以使用少于完整集合的单词,则必须围绕它包装一些排列/组合代码,但给出的算法非常有效。
对于 Java,我会考虑要么在内存中维护一个哈希表(假设你有空间),要么使用一个外部数据库,其中查找键是排序的变量,当然允许重复,因为pore
和rope
都来自eorp
.
虽然grep
基于我的解决方案对我自己的目的来说很好,但您可能不想在健壮的应用程序中依赖外部工具和子流程。