新建一个数组res,用于保存结果。
新建一个pos下标,用于指向数组res的最新元素的位置。
循环遍历一次输入数组str:
    1.当res的第pos个元素和str的第i个元素都等于1,删除res的第pos个元素 并pos减一;
    2.当res的第pos个元素和str的第i个元素都等于0,替换res的第pos个元素为1,
        2.1此时需要再判断 若res的第pos-1个元素存在并且为1,则删除res的第pos-1和pos个元素,pos减二;
    3.当res的第pos个元素不存在或者不等于str的第i个元素,新增str的第i个元素到res 并pos加一。
遍历结束,返回最终结果res。

import java.util.*;
public class Solution {
    /**
     * @param str string字符串 初始字符串
     * @return string字符串
     */
    public String solve (String str) {     
        if(str == null || str.length() <= 1)
            return str;
        int n = str.length();
        StringBuilder res = new StringBuilder();
        res.append(str.charAt(0));
        int pos = 0;
        for(int i = 1; i < n; i++){
            char s = str.charAt(i);
            if(pos >= 0 && res.charAt(pos) == s){
                if(res.charAt(pos) == '1'){
                    res.deleteCharAt(pos);
                    pos--;
                }else{
                    res.deleteCharAt(pos);
                    res.append("1");
                    if(pos > 0 && res.charAt(pos-1) == '1'){
                        res.delete(pos-1,pos+1);
                        pos -=2;
                    }
                }
            }else{
                res.append(s);
                pos++;
            }
        }
        return new String(res);
    }
}

时间复杂度:O(N)
空间复杂度:O(N)