我會擴大我上面的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