我会扩大我上面的quesion提出的意见:如果你有一个小数目固定的元素集合,可以代表组为二进制口罩。所以说你有原始的字符串集:
var sset = ["AB", "ABDE", "CDE", "C", "BE"];
创建一个可能的元素和位字典。位是两个,其可以通过比特移位来创建职权:1 << n
是位n
:
dict = {
A: (1 << 0),
B: (1 << 1),
C: (1 << 2),
D: (1 << 3),
E: (1 << 4),
};
即字典然后可用于创建位掩码:
function bitmask(s, d) {
let res = 0;
for (let i = 0; i < s.length; i++) {
res |= d[s[i]]
}
return res;
}
创建一个同伴阵列到包含掩码的集合:
var mset = sset.map(function(x) { return bitmask(x, dict); });
如果要检查输入,请先将其转换为掩码,然后运行检查。一组s
包含输入x
如果(s & x) == x
的所有位:
var s = "ADE";
var m = bitmask(s, dict);
for (let i = 0; i < mset.length; i++) {
console.log(sset[i], s, (mset[i] & m) == m);
}
您可以使用此策略几个条件:
• (a & b) == b
—的b
所有元素都包含在a
;
• (a & b) == 0
— a
和b
没有共同的元素;
• (a & b) != 0
— b
的至少一个元素在a
;
• a == b
—套a
和b
是相同的。
在集用语a & b
是交叉点,a | b
是工会和a^b
是a
和b
对称差。
据我所知,jQuery是一个使用Javascript编写的库,所以所有按位运算符都应该可用。
不确定逻辑是什么? “当输入的组合与数组中的数字简单匹配时”的预期结果是什么? – guest271314
如果输入的组合是数组,则结果为正数,输入有效,是。这就是我所说的一个微不足道的情况。 –
你的意思是如果输入“AB”和“D”,结果应该是“yes”?作为一个匹配在数组中找到?目前还不清楚预期的输入,匹配逻辑或结果是什么。你能否包含你试图通过问题解决问题的代码?请参阅https://stackoverflow.com/help/mcve – guest271314