Remove All Adjacent Duplicates in String II

Given a string s, a k duplicate removal consists of choosing k adjacent and equal letters from s and removing them causing the left and the right side of the deleted substring to concatenate together.

We repeatedly make k duplicate removals on s until we no longer can.

Return the final string after all such duplicate removals have been made.

It is guaranteed that the answer is unique.

Example 1:

Input: s = "abcd", k = 2
Output: "abcd"
Explanation: There's nothing to delete.

Example 2:

Input: s = "deeedbbcccbdaa", k = 3
Output: "aa"
Explanation: 
First delete "eee" and "ccc", get "ddbbbdaa"
Then delete "bbb", get "dddaa"
Finally delete "ddd", get "aa"

Example 3:

Input: s = "pbbcggttciiippooaais", k = 2
Output: "ps"

Constraints:

  • 1 <= s.length <= 10^5
  • 2 <= k <= 10^4
  • s only contains lower case English letters.

思路:用stack做,node里面存char和fre;然后遇见不同的push,相同的记录fre+1,然后==k, 就pop;最后倒序输出;

class Solution {
    class Node {
        public char c;
        public int fre;
        public Node(char c, int fre) {
            this.c = c;
            this.fre = fre;
        }
    }
    public String removeDuplicates(String s, int k) {
        Stack<Node> stack = new Stack<>();
        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(stack.isEmpty() || stack.peek().c != c) {
                stack.push(new Node(c, 1));
            } else {
                stack.peek().fre++;
                if(stack.peek().fre == k) {
                    stack.pop();
                }
            }
        }
        StringBuilder sb = new StringBuilder();
        while(!stack.isEmpty()) {
            Node node = stack.pop();
            int step = node.fre;
            while(step > 0) {
                sb.insert(0, node.c);
                step--;
            }
        }
        return sb.toString();
    }
}
### 删除相邻重复项时 `SY-SUBRC` 的使用 在 ABAP 中,`DELETE ADJACENT DUPLICATES FROM` 是一种用于从内部表中删除连续相同记录的操作语句。执行此操作后,系统会自动设置系统字段 `SY-SUBRC` 来指示操作的结果状态。 #### 关于 `SY-SUBRC` - 当成功完成删除操作时,`SY-SUBRC` 将被设置为 0 表明没有任何错误发生[^1]。 - 如果未找到任何可以删除的相邻重复项,则 `SY-SUBRC` 同样会被设为 0,因为这并不算作是一个错误情况[^2]。 以下是具体的例子展示如何利用该命令以及处理可能遇到的问题: ```abap DATA: itab TYPE TABLE OF string, wa TYPE string. "填充数据到内表itab APPEND 'A' TO itab. APPEND 'B' TO itab. APPEND 'B' TO itab. "这里有两个相同的'B' APPEND 'C' TO itab. APPEND 'D' TO itab. APPEND 'D' TO itab. "这里有另一个重复'D' WRITE / 'Before deleting duplicates:'. LOOP AT itab INTO wa. WRITE / wa. ENDLOOP. "调用删除相邻重复项函数并检查返回码 DELETE ADJACENT DUPLICATES FROM itab. IF sy-subrc EQ 0. WRITE / 'Deletion successful.'. ELSE. WRITE / 'An error occurred during deletion.'. ENDIF. WRITE / 'After deleting duplicates:'. LOOP AT itab INTO wa. WRITE / wa. ENDLOOP. ``` 上述代码片段展示了如何向一个字符串类型的简单标准表插入一些具有潜在重复性的条目,随后通过 `DELETE ADJACENT DUPLICATES FROM` 命令去除这些连续出现两次以上的项目,并验证其后的 `SY-SUBRC` 是否正常反映预期的行为。 #### 故障排除指南 如果发现程序运行结果不符合期望或者遇到了异常状况,可以从以下几个方面入手排查问题: 1. **确认输入表格结构**: 确保所使用的内部表确实含有能够形成“邻接”的元素集合;否则即使语法正确也可能得不到理想效果。 2. **理解逻辑定义差异**: 注意区分 “adjacent” (即紧挨着彼此) 和其他形式的数据冗余概念之间的区别,在某些场景下仅移除真正意义上的邻居副本才是必要的行为模式之一. 3. **调试工具的应用**: 使用ABAP Debugger逐步跟踪每一步骤的变化过程可以帮助定位具体哪个环节出了差错。 4. **考虑边界条件测试**: 对极端案例比如空列表或是完全由单一值构成的大规模数组做额外检验来增强解决方案鲁棒性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值