##### Problem Statement

Given two binary strings, return their sum (also a binary string).

For example,a = "11", b = "1"

Return "100".

###### Solution Explanation

The question is very straightforward where you add two binary values in string form. Carry is the only thing we needed to handle here carefully.

For example,

```
B1 101
B2 11
Carry 11
-------
Sum 1000
```

The algorithmic solution should be basically retrieve the last char from both the strings, get the integer value, add it to the sum, check if there's a carry, append the rest of the value to resultant string.

Here's how the code in java looks like,

```
public class AddBinary {
public static void main(String[] args) {
String s1="101";
String s2="11";
System.out.println("Binary addition of s1 and s2 is "+addBinary(s1,s2));
}
public static String addBinary(String a, String b) {
StringBuilder result = new StringBuilder();
int i = a.length() - 1, j = b.length() - 1, carry = 0;
while (i >= 0 || j >= 0) {
int sum = carry;
if (j >= 0)
sum += b.charAt(j--) - '0';
if (i >= 0)
sum += a.charAt(i--) - '0';
result.append(sum % 2);
carry = sum / 2;
}
if (carry != 0)
result.append(carry);
return result.reverse().toString();
}
}
```

###### Time Complexity

The time complexity is O(m+n) where m is the length of the binary string a and n is the length of the binary string b.