Given two binary strings, return their sum (also a binary string).
For example,
a = “11”
b = “1”
Return “100”.
public static String addBinary(String a, String b) {
Stack<Character> aStack = new Stack<Character>();
Stack<Character> bStack = new Stack<Character>();
StringBuilder sb = new StringBuilder();
int count = 0;
if (a.length() < b.length()) {
String c = a;
a = b;
b = c;
}
for (int i = 0; i < a.length(); i++) {
aStack.push(a.charAt(i));
}
for (int i = 0; i < b.length(); i++) {
bStack.push(b.charAt(i));
}
while (bStack.size() > 0) {
char aChar = aStack.pop();
char bChar = bStack.pop();
if (count == 0) {
if (aChar == '1' && bChar == '1') {
count = 1;
sb.append('0');
} else if (aChar == '1' && bChar == '0') {
count = 0;
sb.append('1');
} else if (aChar == '0' && bChar == '1') {
count = 0;
sb.append('1');
} else if (aChar == '0' && bChar == '0') {
count = 0;
sb.append('0');
}
} else {
if (aChar == '1' && bChar == '1') {
count = 1;
sb.append('1');
} else if (aChar == '1' && bChar == '0') {
count = 1;
sb.append('0');
} else if (aChar == '0' && bChar == '1') {
count = 1;
sb.append('0');
} else if (aChar == '0' && bChar == '0') {
count = 0;
sb.append('1');
}
}
}
if (aStack.size() == 0) {
return count == 1 ? sb.append('1').reverse().toString() : sb.reverse().toString();
}
while (aStack.size() > 0) {
if (count == 0) {
sb.append(aStack.pop());
} else {
char c = aStack.pop();
if (c == '1') {
count = 1;
sb.append('0');
} else {
count = 0;
sb.append('1');
}
}
}
return count == 1 ? sb.append('1').reverse().toString() : sb.reverse().toString();
}