我正在使用SQLite数据库。如何获取仅包含给定字母集的单词?
e.g。如果字母是:h, o, e, p, g, m
然后结果可能包含家,诗等。
答案 0 :(得分:2)
将您的字母列表转换为如下所示的条件:
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
我们的想法是从单词中删除列表中的每个字母,并查看结果是否为空,并检查没有使用的字母超过允许的次数。这将产生您想要的结果(demo)。
查询的第一部分可能是由一个打印“递归”字符串的简单循环产生的:每个字母打印replace(
,然后打印Word
,然后打印,'x','')
,用x
替换列表中的每个字符。
查询的第二部分是通过浏览您拥有的每个不同的字母,并创建与“字母清单”中的计数相对应的表达式来生成的。例如,如果您有两个'o'
,请添加
and length(Word)-length(replace(Word,'o','')) <= 2
答案 1 :(得分:0)
首先循环2 ^(字符数)以启用/禁用每个字符(如果使用相同的字符,可能会有点困难)。
然后在上面的循环中,通过排列算法循环遍历所有字符组合。