2012-09-11 189 views
6

我將一組英文字母表示爲26位的位串。第一位對應於'a',將設置位設爲'b',依此類推。 因此,
字符串ab被表示爲11000000000000000000000000
現在,給定兩個位串,我想檢查位串1是否是位串2的子集。也就是說,在所有位置,位串1具有'1'位字符串2也應該有'1'。這意味着string1中的所有字符也存在於string2中。有人可以讓我知道這樣做的最好方法嗎?
我知道一個簡單的方法如下:遍歷位串1並檢查位串2中的相應位。不過,我想知道這是否可以使用一些逐位運營商以更有效的方式位字符串:檢查一個位串是否是另一個位的子集

+0

的子集,這是如何存儲,作爲一個'String'或作爲積分值('Integer')佔據第一26個比特?如果後者,簡單的按位操作應該做的伎倆,其他更復雜.. – Nim

回答

10

如果你真的只使用26位,你可以使用一個整數(32位)來表示此位集,並使用bitwise AND(&)運營商,得到兩套的intersection

a & b == a如果,ab

0

如果你會使用BitSet,而不是byte,您可以使用andxor運營商來完成。

BitSet有不同的位操作,除了shift,不幸的是。

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/BitSet.html#xor%28java.util.BitSet%29

首先設置xor秒組應該是0

既然你只使用26個字符,你可以做同樣的用一個簡單的int了。只設置各個位更多的是有點亂:

a |= 1 << offset; 
+0

這檢查相等,而不是子集! – TimeToCodeTheRoad

+0

對於子集使用'a和b = a',等式'a xor b = 0'。 –

相關問題