# Maximize sum by splitting given binary strings based on given conditions

• Last Updated : 15 Feb, 2022

Given two binary strings str1 and str2 each of length N, the task is to split the strings in such a way that the sum is maximum with given conditions.

• Split both strings at the same position into equal length substrings.
• If both the substrings have only 0’s then the value of that substring to be added is 1.
• If both the substrings have only 1’s then the value of that substring to be added is 0.
• If both the substrings have 0’s and 1’s then the value of that substring to be added is 2.

Return the maximum sum possible.

Examples:

Input: str1 = “0101000”, str2 = “1101100”
Output: 8
Explanation:
Split like this:
Take “0” from str1 and “1” from str2 -> 2
Take “10” from str1 and “10” from str2 -> 2
Take “1” from str1 and “1” from str2 -> 0
Take “0” from str1 and “1” from str2 -> 2
Take “0” from str1 and “0” from str2 -> 1
Take “0” from str1 and “0” from str2 -> 1
Sum is 2 + 2 + 0 + 2 + 1 + 1 => 8

Input: str1 = “01”, str2 = “01”
Output: 2

Approach: This problem can be solved using the greedy approach. First, take some of the distinct pair means (0, 1) because it gives the maximum value 2 or with a distinct value pair with the same value pair,  the maximum value is 2 so there is no benefit. then try to make pair of (0, 0) with (1, 1) or vice versa to maximize the sum.

• Initialize the MaxSum to 0.
• Traverse the strings. If Ai is not equal to Bi, increment the MaxSum by 2.
• Traverse the strings again and try to pair with opposite value means 0 with 1 or 1 with 0.
• Check previous and next value of string if it’s opposite increment MaxSum by 2.
• Else if the pair is only (0, 0) increment MaxSum by 1.

Below is the implementation of the above-mentioned approach:

## C++

 `// C++ program to split two``// binary strings in such a way``// such that sum is maximum.``#include ``using` `namespace` `std;` `// Function to split strings``// to find maximum sum``int` `MaxSum(string a, string b)``{``    ``int` `ans = 0;``    ``for` `(``int` `i = 0; i < a.length(); i++) {``        ``if` `(a[i] != b[i])``            ``ans += 2;``    ``}``    ``int` `n = a.length();` `    ``// Traverse the strings.``    ``for` `(``int` `i = 0; i < n; i++) {``        ``if` `(a[i] == b[i]) {``            ``if` `(a[i] == ``'0'``) {` `                ``// If Ai is not equal to Bi,``                ``// increment the MaxSum by 2``                ``if` `(i + 1 < n and a[i + 1] == ``'1'``                    ``and b[i + 1] == ``'1'``) {``                    ``ans += 2, i++;``                ``}` `                ``// Else if the pair is only (0, 0)``                ``// increment MaxSum by 1.``                ``else` `{``                    ``ans += 1;``                ``}``            ``}``            ``else` `{``                ``if` `(i + 1 < n and a[i + 1] == ``'0'``                    ``and b[i + 1] == ``'0'``) {``                    ``ans += 2, i++;``                ``}``                ``else` `{``                    ``ans += 0;``                ``}``            ``}``        ``}``    ``}``    ``return` `ans;``}` `// Driver Code``int` `main()``{` `    ``string a = ``"0101000"``;``    ``string b = ``"1101100"``;``    ``cout << MaxSum(a, b);``    ``return` `0;``}`

## Java

 `// Java program to split two``// binary Strings in such a way``// such that sum is maximum.``class` `GFG {` `  ``// Function to split Strings``  ``// to find maximum sum``  ``static` `int` `MaxSum(String a, String b) {``    ``int` `ans = ``0``;``    ``for` `(``int` `i = ``0``; i < a.length(); i++) {``      ``if` `(a.charAt(i) != b.charAt(i))``        ``ans += ``2``;``    ``}``    ``int` `n = a.length();` `    ``// Traverse the Strings.``    ``for` `(``int` `i = ``0``; i < n; i++) {``      ``if` `(a.charAt(i) == b.charAt(i)) {``        ``if` `(a.charAt(i) == ``'0'``) {` `          ``// If Ai is not equal to Bi,``          ``// increment the MaxSum by 2``          ``if` `(i + ``1` `< n && a.charAt(i + ``1``) == ``'1'``              ``&& b.charAt(i + ``1``) == ``'1'``) {``            ``ans += ``2``;``            ``i++;``          ``}` `          ``// Else if the pair is only (0, 0)``          ``// increment MaxSum by 1.``          ``else` `{``            ``ans += ``1``;``          ``}``        ``} ``else` `{``          ``if` `(i + ``1` `< n && a.charAt(i + ``1``) == ``'0'``              ``&& b.charAt(i + ``1``) == ``'0'``) {``            ``ans += ``2``;``            ``i++;``          ``} ``else` `{``            ``ans += ``0``;``          ``}``        ``}``      ``}``    ``}``    ``return` `ans;``  ``}` `  ``// Driver Code``  ``public` `static` `void` `main(String args[]) {` `    ``String a = ``"0101000"``;``    ``String b = ``"1101100"``;``    ``System.out.println(MaxSum(a, b));``  ``}``}` `// This code is contributed by Saurabh Jaiswal`

## Python3

 `# python3 program to split two``# binary strings in such a way``# such that sum is maximum.` `# Function to split strings``# to find maximum sum``def` `MaxSum(a, b):` `    ``ans ``=` `0``    ``for` `i ``in` `range``(``0``, ``len``(a)):``        ``if` `(a[i] !``=` `b[i]):``            ``ans ``+``=` `2` `    ``n ``=` `len``(a)` `    ``# Traverse the strings.``    ``i ``=` `0``    ``while` `i < n:``        ``if` `(a[i] ``=``=` `b[i]):``            ``if` `(a[i] ``=``=` `'0'``):` `                ``# If Ai is not equal to Bi,``                ``# increment the MaxSum by 2``                ``if` `(i ``+` `1` `< n ``and` `a[i ``+` `1``] ``=``=` `'1'``                        ``and` `b[i ``+` `1``] ``=``=` `'1'``):``                    ``ans, i ``=` `ans ``+` `2``, i ``+` `1` `                ``# Else if the pair is only (0, 0)``                ``# increment MaxSum by 1.``                ``else``:``                    ``ans ``+``=` `1` `            ``else``:``                ``if` `(i ``+` `1` `< n ``and` `a[i ``+` `1``] ``=``=` `'0'``                        ``and` `b[i ``+` `1``] ``=``=` `'0'``):``                    ``ans, i ``=` `ans ``+` `2``, i ``+` `1` `                ``else``:``                    ``ans ``+``=` `0``        ``i ``+``=` `1``    ``return` `ans` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:` `    ``a ``=` `"0101000"``    ``b ``=` `"1101100"``    ``print``(MaxSum(a, b))` `    ``# This code is contributed by rakeshsahni`

## C#

 `// C# program to split two``// binary strings in such a way``// such that sum is maximum.``using` `System;``class` `GFG``{` `  ``// Function to split strings``  ``// to find maximum sum``  ``static` `int` `MaxSum(``string` `a, ``string` `b)``  ``{``    ``int` `ans = 0;``    ``for` `(``int` `i = 0; i < a.Length; i++) {``      ``if` `(a[i] != b[i])``        ``ans += 2;``    ``}``    ``int` `n = a.Length;` `    ``// Traverse the strings.``    ``for` `(``int` `i = 0; i < n; i++) {``      ``if` `(a[i] == b[i]) {``        ``if` `(a[i] == ``'0'``) {` `          ``// If Ai is not equal to Bi,``          ``// increment the MaxSum by 2``          ``if` `(i + 1 < n && a[i + 1] == ``'1'``              ``&& b[i + 1] == ``'1'``) {``            ``ans += 2;``            ``i++;``          ``}` `          ``// Else if the pair is only (0, 0)``          ``// increment MaxSum by 1.``          ``else` `{``            ``ans += 1;``          ``}``        ``}``        ``else` `{``          ``if` `(i + 1 < n && a[i + 1] == ``'0'``              ``&& b[i + 1] == ``'0'``) {``            ``ans += 2;``            ``i++;``          ``}``          ``else` `{``            ``ans += 0;``          ``}``        ``}``      ``}``    ``}``    ``return` `ans;``  ``}` `  ``// Driver Code``  ``public` `static` `void` `Main()``  ``{` `    ``string` `a = ``"0101000"``;``    ``string` `b = ``"1101100"``;``    ``Console.Write(MaxSum(a, b));``  ``}``}` `// This code is contributed by Samim Hossain Mondal.`

## Javascript

 ``

Output

`8`

Time Complexity: O(N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up