Calculate score for the given binary string - GeeksforGeeks

27 Apr, 2021
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++
Java
Python3
C#
PHP
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; // Function to return the score for// the given binary stringint 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 codeint main(){    string str = "11011";    cout << calcScore(str);     return 0;}
// Java implementation of the approachclass 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 stringdef 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 codeif __name__ == '__main__':    str = "11011"    print(calcScore(str)) # This code is contributed by# Surendra_Gangwar
// C# implementation of the approachusing 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 stringfunction 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 stringfunction 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 codevar str = "11011";document.write( calcScore(str));  </script>
7
 
ankthon
Naman_Garg
SURENDRA_GANGWAR
Rajput-Ji
rrrtnx
binary-string
substring
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Top 50 String Coding Problems for Interviews
Naive algorithm for Pattern Searching
Vigenère Cipher
Hill Cipher
Count words in a given string
How to Append a Character to a String in C
Convert character array to string in C++
sprintf() in C
Program to count occurrence of a given character in a string
Converting Roman Numerals to Decimal lying between 1 to 3999