获取使用包含字母过滤的单词列表

时间:2013-10-03 11:19:27

标签: sql sqlite

我正在使用SQLite数据库。如何获取仅包含给定字母集的单词?

e.g。如果字母是:h, o, e, p, g, m

然后结果可能包含家,诗等。

2 个答案:

答案 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 ^(字符数)以启用/禁用每个字符(如果使用相同的字符,可能会有点困难)。

然后在上面的循环中,通过排列算法循环遍历所有字符组合。