给定一个无符号的32位整数,计算模式的出现次数



我想计算num2在num1中出现的次数。这两个数字最多可以是32位。

给定一个无符号的32位整数,计算模式101的出现次数(最多可以是32位((仅使用逐位运算编写程序(这些编号最多可以是32位

100101->1次​1010110101->4次

此代码适用于字符串,而不是二进制编号的最佳字符串

uint32_t ReturnCount(string num1,string num2) {
int n = num1.length(); int m = num2.length();
int count=0;
for (int i = 0; i <= n-m ; ++i) 
{
int j ;
for (j=0; j < m; ++j) 
{
if (num1[i + j] != num2[j]) 
break;
}
if (j == m) 
{
count ++;
j=0;
}  
}
return count;        
}

以下是一种可能的方法。

  1. 使用std::bit_width计算num1mum2的宽度
  2. 如果num1的宽度小于num2的宽度,则不匹配
  3. 创建宽度为num2的掩码
uint32_t mask = (1 << width) - 1;
  1. 在循环中开始匹配:
if(num2 == (num1 & mask)) // found a match
  1. num2mask都向左移动一个
  2. 如果移位数(5(大于num1num2之间的宽度差,则完成

最新更新