位运算实例

位运算符&(与)、|(或)、^(异或)、~(非)

左移运算符<<、右移运算符>>

1、实例一

给定字母字符串A和字符串B,判断A是否包含所有字母B。

这题有很多解法,让我们回忆一下,最常用的数组如何解呢。我们维护一个26长度的数组,A....Z对应数组的下表是1...26,每个index对应的取0或1,如果存在即为1,如果不存在即为0。遍历字符A,赋值。遍历字符B,判断数组[B.charAt[i]-'A']==0,true就说明A中不存在该字符。false说明A中存在对应的字符。

说这么多,其实就是我们是否可以将数组中的0,1表示,直接用一个整数来代替呢。答案是可以的。

  boolean BitComparator(String s1,String s2)
   {
	   int hash=0;
	   for(int i=0;i<s1.length();i++)
	   {
		   hash|=1<<(s1.charAt(i)-'A');//将hash值与相应的字符或,
                                               //就相当于用不同的二进制‘位’存储了该数字
	   }
	   for(int j=0;j<s2.length();j++)
	   {
		   if((hash & (1<<(s2.charAt(j)-'A')))==0)//如果hash值与s2中的字符与的结果为0
                                                          //表示该字符表示的二进制‘位’与所有hash
                   return false;                          //的‘1’不匹配
	   }
	   return true;
   }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值