我正在使用 SQLite 数据库。如何获取仅包含给定字母集的单词?
例如,如果字母是:h, o, e, p, g, m
然后结果可能包含家庭、诗歌等。
将您的字母列表转换为如下所示的条件:
select Word
from words
where
length(
replace(
replace(
replace(
replace(
replace(Word
,'h','')
,'o','')
,'e','')
,'p','')
,'m','')
) = 0
-- In the expressions below replace 1 with the number of copies
-- of each letter than you have
and length(Word)-length(replace(Word,'h','')) <= 1
and length(Word)-length(replace(Word,'o','')) <= 1
and length(Word)-length(replace(Word,'e','')) <= 1
and length(Word)-length(replace(Word,'p','')) <= 1
and length(Word)-length(replace(Word,'m','')) <= 1
这个想法是从单词中删除列表中的每个字母,然后查看结果是否为空,并检查没有字母使用次数超过允许的次数。这将产生您想要的结果(演示)。
查询的第一部分可以由打印“递归”字符串的简单循环产生:打印replace(
每个字母,然后打印Word
,然后打印,'x','')
,替换x
列表中的每个字符。
查询的第二部分是通过遍历您拥有的每个不同字母并创建一个与其在“字母清单”中的计数相对应的表达式来生成的。例如,如果您有两个'o'
s,则添加
and length(Word)-length(replace(Word,'o','')) <= 2
首先循环 2^(字符数)以启用/禁用每个字符(如果使用相同的字符可能会更困难)。
然后在上面的循环中,通过置换算法遍历字符的所有组合。