我将一组英文字母表示为 26 位位串。第一位对应于'a',设置位对应于'b',依此类推。因此,
字符串 ab 表示为 11000000000000000000000000
现在,给定两个位串,我想检查位串 1 是否是位串 2 的子集。也就是说,在所有位置位串 1 都有一个“1”,位串 2 也应该有一个'1'。这意味着 string1 中的所有字符也存在于 string2 中。有人可以让我知道最好的方法吗?
我知道一个简单的方法如下:遍历位string1并检查位string2中的相应位。但是,我想知道这是否可以使用一些位运算符以更有效的方式完成
问问题
2393 次
2 回答
0
如果您要使用BitSet
而不是byte
,则可以使用and
orxor
运算符。
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;
于 2012-09-11T07:15:38.413 回答