Check if an encoding represents a unique binary string
Last Updated :
18 Sep, 2023
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
import java.util.ArrayList;
public class Main {
public static boolean isUniqueEncoding(ArrayList<Integer> encoding, int k) {
String binaryStr = "";
for (int count : encoding) {
binaryStr += "1".repeat(count) + "0";
}
binaryStr = binaryStr.substring(0, binaryStr.length() - 1);
if (binaryStr.length() != k) {
return false;
}
return true;
}
public static void main(String[] args) {
ArrayList<Integer> encoding = new ArrayList<Integer>();
encoding.add(3);
encoding.add(3);
encoding.add(3);
int k = 12;
if (isUniqueEncoding(encoding, k)) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
Python
def isUniqueEncoding(encoding, k):
binaryStr = ""
for count in encoding:
binaryStr += "1" * count + "0"
binaryStr = binaryStr[:-1]
if len(binaryStr) != k:
return False
return True
if __name__ == '__main__':
encoding = [3, 3, 3]
k = 12
if isUniqueEncoding(encoding, k):
print("YES")
else:
print("NO")
C#
using System;
using System.Collections.Generic;
class Program
{
static bool IsUniqueEncoding(List<int> encoding, int k)
{
string binaryStr = "";
foreach (int count in encoding)
{
binaryStr += new string('1', count) + "0";
}
binaryStr = binaryStr.Substring(0, binaryStr.Length - 1);
if (binaryStr.Length != k)
{
return false;
}
return true;
}
static void Main()
{
List<int> encoding = new List<int> { 3, 3, 3 };
int k = 12;
if (IsUniqueEncoding(encoding, k))
{
Console.WriteLine("yes");
}
else
{
Console.WriteLine("No");
}
}
}
JavaScript
function isUniqueEncoding(encoding, k) {
let binaryStr = "";
for (let count of encoding) {
binaryStr += "1".repeat(count) + "0";
}
binaryStr = binaryStr.substring(0, binaryStr.length - 1);
if (binaryStr.length !== k) {
return false;
}
return true;
}
let encoding = [3, 3, 3];
let k = 12;
if (isUniqueEncoding(encoding, k)) {
console.log("YES");
} else {
console.log("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
// Java program to check if given encoding
// represents a single string.
import java.io.*;
class GFG
{
static boolean 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
static public void main (String[] args)
{
int []a = {3, 3, 3};
int n = a.length;
int k = 12;
if (isUnique(a, n, k))
System.out.println("Yes");
else
System.out.println("No");
}
}
// This code is contributed by vt_m
Python3
# Python 3 program to check if given
# encoding represents a single string.
def isUnique(a, n, k):
sum = 0
for i in range(0, n, 1):
sum += a[i]
sum += n - 1
# Return true if sum becomes k
return (sum == k)
# Driver Code
if __name__ == '__main__':
a = [3, 3, 3]
n = len(a)
k = 12
if (isUnique(a, n, k)):
print("Yes")
else:
print("No")
# This code is contributed by
# Surndra_Gangwar
C#
// C# program to check if given encoding
// represents a single string.
using System;
class GFG
{
static 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
static public void Main ()
{
int []a = {3, 3, 3};
int n = a.Length;
int k = 12;
if (isUnique(a, n, k))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
// This code is contributed by vt_m
JavaScript
<script>
// javascript program to check if given encoding
// represents a single string.
function isUnique(a , n , k)
{
var sum = 0;
for (i = 0; i < n; i++)
sum += a[i];
sum += n - 1;
// Return true if sum becomes k
return (sum == k);
}
// Driver Code
var a = [ 3, 3, 3 ];
var n = a.length;
var k = 12;
if (isUnique(a, n, k))
document.write("Yes");
else
document.write("No");
// This code is contributed by Rajput-Ji
</script>
PHP
<?php
// PHP program to check
// if given encoding
// represents a single string
function isUnique( $a, $n, $k)
{
$sum = 0;
for ($i = 0; $i < $n; $i++)
$sum += $a[$i];
$sum += $n - 1;
// Return true if
// sum becomes k
return ($sum == $k);
}
// Driver Code
$a = array(3, 3, 3);
$n = count($a);
$k = 12;
if (isUnique($a, $n,$k))
echo"Yes";
else
echo "No";
// This code is contributed by anuj_67.
?>
Time complexity : O(n)
Auxiliary Space : O(1)
Similar Reads
Check if a binary string contains all permutations of length k Given a binary string and k, to check whether it's contains all permutations of length k or not. Examples: Input : Binary string 11001 k : 2 Output : Yes 11001 contains all possibilities of binary sequences with k = 2, 00, 01, 10, 11 Input : Binary string: 1001 k : 2 Output: No 1001 does not contain
13 min read
Python program to check if a string contains all unique characters To implement an algorithm to determine if a string contains all unique characters. Examples: Input : s = "abcd" Output: True "abcd" doesn't contain any duplicates. Hence the output is True. Input : s = "abbd" Output: False "abbd" contains duplicates. Hence the output is False. One solution is to cre
3 min read
Check if binary representations of 0 to N are present as substrings in given binary string Give binary string str and an integer N, the task is to check if the substrings of the string contain all binary representations of non-negative integers less than or equal to the given integer N. Examples: Input: str = â0110", N = 3 Output: True Explanation: Since substrings â0", â1", â10", and â11
9 min read
Check if binary representations of two numbers are anagram Given two numbers you are required to check whether they are anagrams of each other or not in binary representation.Examples: Input : a = 8, b = 4 Output : Yes Binary representations of both numbers have same 0s and 1s. Input : a = 4, b = 5 Output : No Simple Approach: Find the Binary Representation
9 min read
Check if a binary string contains consecutive same or not Given a binary string str consisting of characters '0' and '1'. The task is to find whether the string is valid or not. A string is valid only if the characters are alternating i.e. no two consecutive characters are the same. Examples: Input: str[] = "010101" Output: Valid Input: str[] = "010010" Ou
4 min read