leet-code/src/main/java/leetcode/editor/cn/RemoveAllAdjacentDuplicatesInStringIi.java

104 lines
3.1 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//给你一个字符串 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)
}