Count of N-length binary strings that are repeated concatenation of a substring


The aim of this article is to implement a program to count of N-length binary strings that are repeated concatenation of a substring.

The goal is to determine how many binary strings of the length N can be created by repeatedly concatenating a single substring of a given text, provided a positive integer called N.

Problem Statement

Implement a program to count of N-length binary strings that are repeated concatenation of a substring.

Sample Example 1

Let us take the Input, N = 3
Output: 2

Explanation

Listed below are the feasible binary string of length N=3 with repeated concatenation of a substring.

"000":The substring "0" is repeatedly concatenated to form this string.
"111":The substring "1" is repeatedly concatenated to form this string.

Therefore, when we take the total count of all these strings, we obtain the sum as 2. Hence, the output is 2.

Sample Example 2

Let us take the Input, N = 8
Output: 16

Explanation

Listed below are the feasible binary string of length N=8 with repeated concatenation of a substring.

“00000000”: The substring "0" is repeatedly concatenated to form this string.
“11111111”: The substring "1" is repeatedly concatenated to form this string.
“01010101”: The substring "01" is repeatedly concatenated to form this string.
“10101010”: The substring "10" is repeatedly concatenated to form this string.
"00110011”: The substring "0011" is repeatedly concatenated to form this string.
"11001100”: The substring "1100" is repeatedly concatenated to form this string.
"11011101”: The substring "1101" is repeatedly concatenated to form this string.
"00100010”: The substring "0010" is repeatedly concatenated to form this string.
"10111011”: The substring "1011" is repeatedly concatenated to form this string.
"01000100”: The substring "0100" is repeatedly concatenated to form this string.
"10001000”: The substring "1000" is repeatedly concatenated to form this string.
"00010001”: The substring "0001" is repeatedly concatenated to form this string.
"11101110”: The substring "1110" is repeatedly concatenated to form this string.
"01110111”: The substring "0111" is repeatedly concatenated to form this string.
"01100110”: The substring "0110" is repeatedly concatenated to form this string.
"10011001”: The substring "1001" is repeatedly concatenated to form this string.

Therefore, when we take the total count of all these strings, we obtain the sum as 16. Hence, the output is 16.

Approach

In Order to count of N-length binary strings that are repeated concatenation of a substring, we take the following methodology.

The approach to solve this problem and count of N-length binary strings that are repeated concatenation of a substring.

The above problem can be addressed based on the fact that every feasible string includes a repeated substring that is concatenated, say, C times. The supplied length of string N therefore needs to be divisible by C to produce all the consequent strings.

Thereby, discover every one of the divisors of N, then for each possible divisor, say C, discover the total number of all potential strings that may be created by concatenating them; this number can be determined using 2C. To determine the overall count of every recursive call, apply the same technique across the divisor C then deduct it from 2C. This will also take into account the number of repeated strings that exist among them.

Algorithm

The algorithm to count of N-length binary strings that are repeated concatenation of a substring given below.

  • Step 1 − Start

  • Step 2 − Define function to count the number of strings of length N such that it is a concatenation of its substrings.

  • Step 3 − Check whether the state is already calculated or not

  • Step 4 − Stores the value of the result or the count for the current recursive calls

  • Step 5 − Iterate over all the divisors

  • Step 6 − Return the obtained result

  • Step 7 − Stop

Example: C++ Program

Here is the C program implementation of the above written algorithm to count of N-length binary strings that are repeated concatenation of a substring.

// C++ program for the above approach
#include<bits/stdc++.h>
using namespace std;

// Storing all the states of recurring recursive 
map<int, int> dp;

// Function for counting the number of strings of length n wherein thatstring is a  concatenation of its substrings
int countTheStrings(int n){

   //the single character cannot be repeated
   if (n == 1)
      return 0;
      
   // Checking whether the state is calculated already or not
   if (dp.find(n) != dp.end())
      return dp[n];
      
      // Storing those value of the result or the count for the present recursive call
   int res = 0;
   
   // Iterate through all of the divisors
   for(int d= 1; d <= sqrt(n); d++){
      if (n % d== 0){
         res += (1 << d) -  countTheStrings(d);
         int div1 = n/d;
         if (div1 != d and d!= 1)
         
            // Non-Rep = Total - Rep
            res += (1 << div1) -  countTheStrings(div1);
      }
   }
   
   // Storing the result of the above calculations
   dp[n] = res; 
   
   // Returning the obtained result
   return res;
}
int main(){
   int n = 8;
   cout<< "Count of 8-length binary strings that are repeated concatenation of a substring: "<< endl;
   cout << countTheStrings(n) << endl;
}

Output

Count of 8-length binary strings that are repeated concatenation of a substring −
16

Conclusion

Likewise, we can count of N-length binary strings that are repeated concatenation of a substring.

The challenge of obtaining the count of N-length binary strings that are repeated concatenation of a substring is resolved in this article.

Here C++ programming code as well as the algorithm to count of N-length binary strings that are repeated concatenation of a substring are provided.

Updated on: 28-Jul-2023

60 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements