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

    The input strings are both non-empty and contains only characters 1 or 0.

    Example 1:

    1. Input: a = "11", b = "1"
    2. Output: "100"

    Example 2:

    Input: a = "1010", b = "1011"
    Output: "10101"
    

    Runtime: 64 ms, faster than 48.07% of JavaScript online submissions for Add Binary.

    /**
     * @param {string} a
     * @param {string} b
     * @return {string}
     */
    var addBinary = function(a, b) {
        const lenA = a.length;
        const lenB = b.length;
        let i = lenA - 1;
        let j = lenB - 1;
        let carry = 0;
        const result = [];
        while(i >= 0 || j >= 0) {
            if (a[i] === '1' && b[j] === '1') {
                result.push(carry);
                carry = 1;
            } else if (a[i] === '0' && b[j] === '0') {
                result.push(carry);
                carry = 0;
            } else if ((a[i] === '1' && b[j] !== '1') || (a[i] !== '1' && b[j] === '1')) {
                if (carry) {
                    result.push(0);
                } else {
                    result.push(1);
                }
            } else {
                result.push(carry);
                carry = 0;
            }
            i--;
            j--;
        }
        if (carry) {
            result.push(carry);
        }
        return result.reverse().join('');
    };
    

    Runtime: 60 ms, faster than 98.45% of JavaScript online submissions for Add Binary.

    /**
     * @param {string} a
     * @param {string} b
     * @return {string}
     */
    var addBinary = function(a, b) {
        const lenA = a.length;
        const lenB = b.length;
        let i = lenA - 1;
        let j = lenB - 1;
        let carry = 0;
        let result = '';
        while(i >= 0 || j >= 0) {
            if (a[i] === '1' && b[j] === '1') {
                result = carry + result;
                carry = 1;
            } else if (a[i] === '0' && b[j] === '0') {
                result = carry + result;
                carry = 0;
            } else if ((a[i] === '1' && b[j] !== '1') || (a[i] !== '1' && b[j] === '1')) {
                if (carry) {
                    result = '0' + result;
                } else {
                    result = '1' + result;
                }
            } else {
                result = carry + result;
                carry = 0;
            }
            i--;
            j--;
        }
        if (carry) {
            result = carry + result;
        }
        return result;
    };