LeetCode 1047. 删除字符串中的所有相邻重复项 - Go 实现

  1. 删除字符串中的所有相邻重复项

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 S 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:

输入:“abbaca”
输出:“ca”
解释:
例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复项删除操作,所以最后的字符串为 “ca”。

提示:

1 <= S.length <= 20000
S 仅由小写英文字母组成。

在这里插入图片描述

思路

思路还是比较巧妙
通过 一个 k ++ , k - - 模拟进栈,出栈 原地算法

AC代码

func removeDuplicates(S string) string {
    k := -1
    arr := make([]byte, len(S))
    //copy(arr, S)
    arr[0] = S[0]
    for i:= 0; i < len(S); i++ {
       if k == -1 || arr[k] != S[i] { // 第一个直接赋值
           k++
           arr[k] = S[i]
       } else {
           k--
       }
    }
    return string(arr[0:k+1])
}
欢迎关注公众号:程序员开发者社区

在这里插入图片描述

参考资料
  • https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/
wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付 39.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值