Given a binary string str. For n-contiguous 1s the score is updated as score = score + n2 and for n-contiguous 0s, the score is updated as score = score – n2. The task is to find the score of the complete binary string.
Examples:
Input: str = 11011
Output: 7
score(“11”) – score(“0”) + score(“11”) = 22 – 12 + 22 = 7Input: str = 1100011
Output: -1
Approach: For solving the problem iterate over the given string and calculate the number of contiguous 1s and 0s. For each contiguous chunk of n 1s add n2 to the current score and similarly for each contiguous chunk of n 0s subtract n2 from the current score.
Below is the implementation of the above approach:
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std;
// Function to return the score for // the given binary string int calcScore(string str)
{ int score = 0;
int len = str.length();
// Traverse through string character
for ( int i = 0; i < len;) {
// Initialize current chunk's size
int chunkSize = 1;
// Get current character
char currentChar = str[i++];
// Calculate total chunk size
// of same characters
while (i < len && str[i] == currentChar) {
chunkSize++;
i++;
}
// Add/subtract pow(chunkSize, 2)
// depending upon character
if (currentChar == '1' )
score += pow (chunkSize, 2);
else
score -= pow (chunkSize, 2);
}
// Return the score
return score;
} // Driver code int main()
{ string str = "11011" ;
cout << calcScore(str);
return 0;
} |
// Java implementation of the approach class GFG
{ // Function to return the score for
// the given binary string
public static int calcScore(String str)
{
int score = 0 ;
int len = str.length();
// Traverse through string character
for ( int i = 0 ; i < len;)
{
// Initialize current chunk's size
int chunkSize = 1 ;
// Get current character
char currentChar = str.charAt(i++);
// Calculate total chunk size
// of same characters
while (i < len && str.charAt(i) == currentChar)
{
chunkSize++;
i++;
}
// Add/subtract pow(chunkSize, 2)
// depending upon character
if (currentChar == '1' )
score += Math.pow(chunkSize, 2 );
else
score -= Math.pow(chunkSize, 2 );
}
// Return the score
return score;
}
// Driver code
public static void main(String[] args)
{
String str = "11011" ;
System.out.println(calcScore(str));
}
} // This code is contributed by Naman_Garg |
# Python 3 implementation of the approach # Function to return the score for # the given binary string def calcScore( str ):
score = 0
len1 = len ( str )
# Traverse through string character
i = 0
while (i < len1):
# Initialize current chunk's size
chunkSize = 1
# Get current character
currentChar = str [i]
i + = 1
# Calculate total chunk size
# of same characters
while (i < len1 and str [i] = = currentChar):
chunkSize + = 1
i + = 1
# Add/subtract pow(chunkSize, 2)
# depending upon character
if (currentChar = = '1' ):
score + = pow (chunkSize, 2 )
else :
score - = pow (chunkSize, 2 )
# Return the score
return score
# Driver code if __name__ = = '__main__' :
str = "11011"
print (calcScore( str ))
# This code is contributed by # Surendra_Gangwar |
// C# implementation of the approach using System;
class GFG
{ // Function to return the score for
// the given binary string
public static int calcScore(String str)
{
int score = 0;
int len = str.Length;
// Traverse through string character
for ( int i = 0; i < len;)
{
// Initialize current chunk's size
int chunkSize = 1;
// Get current character
char currentChar = str[i++];
// Calculate total chunk size
// of same characters
while (i < len && str[i] == currentChar)
{
chunkSize++;
i++;
}
// Add/subtract pow(chunkSize, 2)
// depending upon character
if (currentChar == '1' )
score += ( int )Math.Pow(chunkSize, 2);
else
score -= ( int )Math.Pow(chunkSize, 2);
}
// Return the score
return score;
}
// Driver code
public static void Main(String[] args)
{
String str = "11011" ;
Console.WriteLine(calcScore(str));
}
} // This code contributed by Rajput-Ji |
<?php // Php implementation of the approach // Function to return the score for // the given binary string function calcScore( $str )
{ $score = 0;
$len = strlen ( $str );
// Traverse through string character
for ( $i = 0; $i < $len 😉
{
// Initialize current chunk's size
$chunkSize = 1;
// Get current character
$currentChar = $str [ $i ++];
// Calculate total chunk size
// of same characters
while ( $i < $len && $str [ $i ] == $currentChar )
{
$chunkSize ++;
$i ++;
}
// Add/subtract pow(chunkSize, 2)
// depending upon character
if ( $currentChar == '1' )
$score += pow( $chunkSize , 2);
else
$score -= pow( $chunkSize , 2);
}
// Return the score
return $score ;
} // Driver code
$str = "11011" ;
echo calcScore( $str );
// This code is contributed by AnkitRai01
?> |
<script> // Javascript implementation of the approach // Function to return the score for // the given binary string function calcScore(str)
{ var score = 0;
var len = str.length;
// Traverse through string character
for ( var i = 0; i < len;) {
// Initialize current chunk's size
var chunkSize = 1;
// Get current character
var currentChar = str[i++];
// Calculate total chunk size
// of same characters
while (i < len && str[i] == currentChar) {
chunkSize++;
i++;
}
// Add/subtract pow(chunkSize, 2)
// depending upon character
if (currentChar == '1')
score += Math.pow(chunkSize, 2);
else
score -= Math.pow(chunkSize, 2);
}
// Return the score
return score;
} // Driver code var str = "11011" ;
document.write( calcScore(str)); </script> |
7
Time complexity: O(N) where N is the length of the given binary string
Auxiliary space: O(1)