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



京公网安备 11010502036488号