📌  相关文章
📜  数字二进制表示形式中出现的模式

📅  最后修改于: 2021-04-24 05:24:48             🧑  作者: Mango

给定一个字符串pat和一个整数N ,任务是查找N的二进制表示形式pat的出现次数。

例子:

天真的方法:将数字转换为其二进制字符串表示形式,然后使用模式匹配算法检查二进制表示形式中出现模式的次数。

高效方法:

  1. 将二进制模式转换为其十进制表示形式。
  2. 取一个整数all_ones ,其二进制表示形式包括所有设置的位(等于模式中的位数)。
  3. 现在执行N&all_ones将只保留最后k个位不变(其他位将为0),其中k是模式中的位数。
  4. 现在,如果N = pattern ,则意味着N最终以二进制表示形式包含该模式。因此,更新计数=计数+ 1
  5. N右移1并重复前两个步骤,直到N≥pattern且N> 0
  6. 最后打印计数

下面是上述方法的实现:

C++
// C++ program to find the number of times
// pattern p occurred in binary representation
// on n.
#include 
using namespace std;
  
// Function to return the count of occurrence
// of pat in binary representation of n
int countPattern(int n, string pat)
{
    // To store decimal value of the pattern
    int pattern_int = 0;
  
    int power_two = 1;
  
    // To store a number that has all ones in
    // its binary representation and length
    // of ones equal to length of the pattern
    int all_ones = 0;
  
    // Find values of pattern_int and all_ones
    for (int i = pat.length() - 1; i >= 0; i--) {
        int current_bit = pat[i] - '0';
        pattern_int += (power_two * current_bit);
        all_ones = all_ones + power_two;
        power_two = power_two * 2;
    }
  
    int count = 0;
    while (n && n >= pattern_int) {
  
        // If the pattern occurs in the last
        // digits of n
        if ((n & all_ones) == pattern_int) {
            count++;
        }
  
        // Right shift n by 1 bit
        n = n >> 1;
    }
    return count;
}
  
// Driver code
int main()
{
    int n = 500;
    string pat = "10";
    cout << countPattern(n, pat);
}


Java
// Java program to find the number of times
// pattern p occurred in binary representation
// on n.
import java.util.*;
  
class solution
{
  
// Function to return the count of occurrence
// of pat in binary representation of n
static int countPattern(int n, String pat)
{
    // To store decimal value of the pattern
    int pattern_int = 0;
  
    int power_two = 1;
  
    // To store a number that has all ones in
    // its binary representation and length
    // of ones equal to length of the pattern
    int all_ones = 0;
  
    // Find values of pattern_int and all_ones
    for (int i = pat.length() - 1; i >= 0; i--) {
        int current_bit = pat.charAt(i) - '0';
        pattern_int += (power_two * current_bit);
        all_ones = all_ones + power_two;
        power_two = power_two * 2;
    }
  
    int count = 0;
    while (n!=0 && n >= pattern_int) {
  
        // If the pattern occurs in the last
        // digits of n
        if ((n & all_ones) == pattern_int) {
            count++;
        }
  
        // Right shift n by 1 bit
        n = n >> 1;
    }
    return count;
}
  
// Driver code
public static void main(String args[])
{
    int n = 500;
    String pat = "10";
    System.out.println(countPattern(n, pat));
}
}


Python3
# Python 3 program to find the number of times
# pattern p occurred in binary representation
# on n.
  
# Function to return the count of occurrence
# of pat in binary representation of n
def countPattern(n, pat):
      
    # To store decimal value of the pattern
    pattern_int = 0
  
    power_two = 1
  
    # To store a number that has all ones in
    # its binary representation and length
    # of ones equal to length of the pattern
    all_ones = 0
  
    # Find values of pattern_int and all_ones
    i = len(pat) - 1
    while(i >= 0):
        current_bit = ord(pat[i]) - ord('0')
        pattern_int += (power_two * current_bit)
        all_ones = all_ones + power_two
        power_two = power_two * 2
        i -= 1
      
    count = 0
    while (n != 0 and n >= pattern_int):
          
        # If the pattern occurs in the last
        # digits of n
        if ((n & all_ones) == pattern_int):
            count += 1
          
        # Right shift n by 1 bit
        n = n >> 1
      
    return count
  
# Driver code
if __name__ == '__main__':
    n = 500
    pat = "10"
    print(countPattern(n, pat))
  
# This code is contributed by
# Surendra_Gangwar


C#
// C# program to find the number of times 
// pattern p occurred in binary representation 
// on n. 
using System ;
  
class GFG 
{ 
  
// Function to return the count of occurrence 
// of pat in binary representation of n 
static int countPattern(int n, string pat) 
{ 
    // To store decimal value of the pattern 
    int pattern_int = 0; 
  
    int power_two = 1; 
  
    // To store a number that has all ones in 
    // its binary representation and length 
    // of ones equal to length of the pattern 
    int all_ones = 0; 
  
    // Find values of pattern_int and all_ones 
    for (int i = pat.Length - 1; i >= 0; i--) 
    { 
        int current_bit = pat[i] - '0'; 
        pattern_int += (power_two * current_bit); 
        all_ones = all_ones + power_two; 
        power_two = power_two * 2; 
    } 
  
    int count = 0; 
    while (n != 0 && n >= pattern_int) 
    { 
  
        // If the pattern occurs in the last 
        // digits of n 
        if ((n & all_ones) == pattern_int) 
        { 
            count++; 
        } 
  
        // Right shift n by 1 bit 
        n = n >> 1; 
    } 
    return count; 
} 
  
// Driver code 
public static void Main() 
{ 
    int n = 500; 
    string pat = "10"; 
    Console.WriteLine(countPattern(n, pat)); 
} 
} 
  
// This code is contributed by Ryuga


PHP
= 0; $i--) 
    {
        $current_bit = $pat[$i] - '0';
        $pattern_int += ($power_two * $current_bit);
        $all_ones = $all_ones + $power_two;
        $power_two = $power_two * 2;
    }
  
    $count = 0;
    while ($n && $n >= $pattern_int)
    {
  
        // If the pattern occurs in the last
        // digits of $n
        if (($n & $all_ones) == $pattern_int) 
        {
            $count++;
        }
  
        // Right shift $n by 1 bit
        $n = $n >> 1;
    }
    return $count;
}
  
// Driver code
$n = 500;
$pat = "10";
echo countPattern($n, $pat);
  
// This code is contributed by ihritik
?>


输出:
2
想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”