前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode - 删除字符串中的所有相邻重复项

LeetCode - 删除字符串中的所有相邻重复项

作者头像
晓痴
发布2019-07-24 11:54:44
3K0
发布2019-07-24 11:54:44
举报
文章被收录于专栏:曌的晓痴曌的晓痴

该题是LeetCode第137次周赛的编号为1047的题目,三周前的一次周赛,其实我都已经忘了题目了...毫无印象三周前我也参加了周赛。

这好像是系列的第一个周赛题,每次参加的周赛,都由于实力有限,所以都只写了一两题的Easy的题目....之后慢慢努力完成Medium的吧。

原题地址: https://leetcode-cn.com/contest/weekly-contest-137/problems/remove-all-adjacent-duplicates-in-string/

题目描述

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

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

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

示例:

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

提示:

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

解题思路:

关于这题,我的思路是用暴力法解决问题,简单易懂,同时效率也不高。

首先将输入的字符串包装为StringBuilder对象,然后一直从头遍历StringBuilder对象,找到重复字符串,就把这两个重复的给删除,删除之后,再从头遍历该StringBuilder对象,直到遍历StringBuilder之后发现不了重复字符为止。最后返回该StringBuilder对象。

后来意识到,可以使用栈的方式解决该问题,只需要遍历一次就可以解决问题,内存占用也少很多。

中文题解:

https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/solution/

个人题解:

代码语言:javascript
复制
    public String removeDuplicates(String S) {
     StringBuilder stringBuilder = new StringBuilder(S);
        while (true) {
            boolean flag = false;
            for (int i = 0; i < stringBuilder.length() - 1; i++) {
                if (stringBuilder.charAt(i) == stringBuilder.charAt(i + 1)) {
                    stringBuilder.deleteCharAt(i);
                    stringBuilder.deleteCharAt(i);
                    i = -1;
                    flag = true;
                }
            }
            if (!flag) {
                return stringBuilder.toString();
            }
        }
    }

结果:

错误示范下的运行结果,可以看到结果相当的理想,只超越了12%的人,还好不是垫底。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 曌的晓痴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档