104 lines
3.1 KiB
Java
104 lines
3.1 KiB
Java
//给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。
|
||
//
|
||
// 你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。
|
||
//
|
||
// 在执行完所有删除操作后,返回最终得到的字符串。
|
||
//
|
||
// 本题答案保证唯一。
|
||
//
|
||
//
|
||
//
|
||
// 示例 1:
|
||
//
|
||
// 输入:s = "abcd", k = 2
|
||
//输出:"abcd"
|
||
//解释:没有要删除的内容。
|
||
//
|
||
// 示例 2:
|
||
//
|
||
// 输入:s = "deeedbbcccbdaa", k = 3
|
||
//输出:"aa"
|
||
//解释:
|
||
//先删除 "eee" 和 "ccc",得到 "ddbbbdaa"
|
||
//再删除 "bbb",得到 "dddaa"
|
||
//最后删除 "ddd",得到 "aa"
|
||
//
|
||
// 示例 3:
|
||
//
|
||
// 输入:s = "pbbcggttciiippooaais", k = 2
|
||
//输出:"ps"
|
||
//
|
||
//
|
||
//
|
||
//
|
||
// 提示:
|
||
//
|
||
//
|
||
// 1 <= s.length <= 10^5
|
||
// 2 <= k <= 10^4
|
||
// s 中只含有小写英文字母。
|
||
//
|
||
// Related Topics 栈
|
||
// 👍 88 👎 0
|
||
|
||
package leetcode.editor.cn;
|
||
|
||
import java.util.Stack;
|
||
|
||
//1209:删除字符串中的所有相邻重复项 II
|
||
public class RemoveAllAdjacentDuplicatesInStringIi {
|
||
public static void main(String[] args) {
|
||
//测试代码
|
||
Solution solution = new RemoveAllAdjacentDuplicatesInStringIi().new Solution();
|
||
//abcd
|
||
System.out.println(solution.removeDuplicates("abcd", 2));
|
||
//aa
|
||
System.out.println(solution.removeDuplicates("deeedbbcccbdaa", 3));
|
||
//ps
|
||
System.out.println(solution.removeDuplicates("pbbcggttciiippooaais", 2));
|
||
}
|
||
|
||
//力扣代码
|
||
//leetcode submit region begin(Prohibit modification and deletion)
|
||
class Solution {
|
||
public String removeDuplicates(String s, int k) {
|
||
int size = 1;
|
||
Stack<Character> stack = new Stack<>();
|
||
for (char ch : s.toCharArray()) {
|
||
if (!stack.isEmpty() && stack.peek() == ch) {
|
||
size++;
|
||
if (size == k) {
|
||
while (size > 1) {
|
||
stack.pop();
|
||
size--;
|
||
}
|
||
if (!stack.isEmpty()) {
|
||
Stack<Character> temp = new Stack<>();
|
||
temp.push(stack.pop());
|
||
while (!stack.isEmpty() && stack.peek().equals(temp.peek())) {
|
||
temp.push(stack.pop());
|
||
size++;
|
||
}
|
||
while (!temp.isEmpty()) {
|
||
stack.push(temp.pop());
|
||
}
|
||
}
|
||
} else {
|
||
stack.push(ch);
|
||
}
|
||
} else {
|
||
stack.push(ch);
|
||
size = 1;
|
||
}
|
||
}
|
||
StringBuilder sBuilder = new StringBuilder();
|
||
while (!stack.isEmpty()) {
|
||
sBuilder.insert(0, stack.pop());
|
||
}
|
||
s = sBuilder.toString();
|
||
return s;
|
||
}
|
||
}
|
||
//leetcode submit region end(Prohibit modification and deletion)
|
||
|
||
} |