class Solution {
public:
string addBinary(string a, string b) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int m = a.size();
int n = b.size();
vector<int> va(m);
vector<int> vb(n);
vector<int> vc(max(m, n) + 1);
for (int i = 0; i < m; i++)
va[i] = a[m - 1 - i] - '0';
for (int j = 0; j < n; j++)
vb[j] = b[n - 1 - j] - '0';
int carry = 0;
for (int i = 0; i < min(m, n); i++) {
int sum = va[i] + vb[i] + carry;
vc[i] = sum % 2;
carry = sum / 2;
}
if (m > n) {
for (int i = n; i < m; i++) {
int sum = va[i] + carry;
vc[i] = sum % 2;
carry = sum / 2;
}
} else {
for (int i = m; i < n; i++) {
int sum = vb[i] + carry;
vc[i] = sum % 2;
carry = sum / 2;
}
}
int s = max(m, n);
if (carry) {
vc[s] = carry;
s += carry;
}
string ret = "";
for (int i = 0; i < s; i++) {
ret += vc[s - 1 - i] + '0';
}
return ret;
}
};
Small Case: 8ms
Large Case: 16ms
Time: O(n)
Space: O(n)