GeeksforGeeks App
Open App
Browser
Continue

# Calculate score for the given binary string

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:
score(“11”) – score(“0”) + score(“11”) = 22 – 12 + 22 = 7

Input: 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++

 `// C++ implementation of the approach``#include ``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

 `// 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`

## Python3

 `# 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#

 `// 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

 ``

## Javascript

 ``

Output:

`7`

Time complexity: O(N) where N is the length of the given binary string
Auxiliary space: O(1)

My Personal Notes arrow_drop_up