新建一个数组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)