class Solution {
public String addBinary(String a, String b) {
Deque<Character> ansSeq = new LinkedList<>();
int indexA = a.length() - 1;
int indexB = b.length() - 1;
int flag = 0;
while (indexA >= 0 || indexB >= 0) {
char cha = (indexA >= 0 ? a.charAt(indexA) : '0');
char chb = (indexB >= 0 ? b.charAt(indexB) : '0');
int sum = (cha - '0') + (chb - '0') + flag;
if (sum == 0) {
ansSeq.add('0');
flag = 0;
} else if (sum == 1) {
ansSeq.add('1');
flag = 0;
} else if (sum == 2) {
ansSeq.add('0');
flag = 1;
} else {
ansSeq.add('1');
flag = 1;
}
--indexA;
--indexB;
}
if (flag == 1)
ansSeq.add('1');
StringBuilder ans = new StringBuilder();
while (!ansSeq.isEmpty())
ans.append(ansSeq.removeLast());
return ans.toString();
}
}