Check if an encoding represents a unique binary string
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++
- Java
- Python
- C#
- Javascript
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
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++
- Java
- Python3
- C#
- Javascript
- PHP
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
No
Time complexity : O(n)
Auxiliary Space : O(1)