Open In App

Check if an encoding represents a unique binary string

Last Updated : 18 Sep, 2023
Comments
Improve
Suggest changes
1 Like
Like
Report

Given an encoding of a binary string of length k, the task is to find if the given encoding uniquely identifies a binary string or not. The encoding has counts of contiguous 1s (separated by 0s). 
For example, encoding of 11111 is {5}, encoding of 01101010 is {2, 1, 1} and encoding of 111011 is {3, 2}.

Examples : 

Input: encoding[] = {3, 3, 3} 
Length, k = 12
Output: No
Explanation: There are more than one possible
binary strings. The strings are 111011101110
and 011101110111. Hence “No”
Input: encoding[] = {3, 3, 2}
Length, k = 10
Output: Yes
Explanation: There is only one possible encoding
that is 1110111011

A naive approach is to take an empty string and traverse through the n integers to no of 1s as given in encoding[0] and then add 1 zero to it, then encoding[1] 1s, and at the end check if the string length is equal to k then print “Yes” or print “No” 

C++




#include <iostream>
#include <vector>
#include <string>
  
using namespace std;
  
bool is_unique_encoding(vector<int> encoding, int k) {
    string binary_str = "";
    for (int count : encoding) {
        binary_str += string(count, '1') + "0";
    }
    binary_str = binary_str.substr(0, binary_str.length() - 1);
  
    if (binary_str.length() != k) {
        return false;
    }
  
    return true;
}
  
int main() {
    vector<int> encoding = {3, 3, 3};
    int k = 12;
  
    if (is_unique_encoding(encoding, k)) {
        cout << "yes" << endl;
    } else {
        cout << "No" << endl;
    }
  
    return 0;
}


Java

Python

C#

Javascript

Output

no

An efficient approach will be to add all the n integers to sum, and then add (n-1) to sum and check if it is equal to K, as n-1 will be the number of zeros in between every 1’s. Check if sum is equal to k, to get exactly one string or else there are more or none. 

Implementation:

C++




// C++ program to check if given encoding
// represents a single string.
#include <bits/stdc++.h>
using namespace std;
  
bool isUnique(int a[], int n, int k)
{
    int sum = 0;
    for (int i = 0; i < n; i++)
        sum += a[i];
      
    sum += n - 1; 
      
    // Return true if sum becomes k
    return (sum == k); 
}
  
// Driver Code
int main() 
{
  
int a[] = {3, 3, 3};
int n = sizeof(a) / sizeof(a[0]);
int k = 12;
if (isUnique(a, n, k))
    cout << "Yes";
else
    cout << "No";
return 0;
}


Java

Python3

C#

Javascript

PHP

Output

No

Time complexity : O(n) 
Auxiliary Space : O(1)

 



Next Article
Article Tags :
Practice Tags :

Similar Reads