删除重复k个字母,删除后的左右连接后有重复的话,继续删除。输出最后的字符串
使用栈的思想来做,记录下当前字母已经连续出现了多少次
public String removeDuplicates(String s, int k) {
char[] res = new char[s.length()];
int[] cnt = new int[s.length()];
int index = 0;
for (int i = 0; i < s.length(); i++) {
res[index] = s.charAt(i);
if (index == 0) cnt[index++] = 1;
else {
if (res[index] == res[index - 1]) {
cnt[index] = cnt[index - 1] + 1;
if (cnt[index] == k) {
index = index - k + 1;
} else {
index++;
}
}
else cnt[index++] = 1;
}
}
return new String(res, 0, index);
}
ps://leetcode.com/problems/remove-all-adjacent-duplicates-in-string-ii/discuss/392933/JavaC%2B%2BPython-Two-Pointers-and-Stack-Solution
大神lee215的代码
public String removeDuplicates(String s, int k) {
int i = 0, n = s.length(), count[] = new int[n];
char[] stack = s.toCharArray();
for (int j = 0; j < n; ++j, ++i) {
stack[i] = stack[j];
count[i] = i > 0 && stack[i - 1] == stack[j] ? count[i - 1] + 1 : 1;
if (count[i] == k) i -= k;
}
return new String(stack, 0, i);
}