C++力扣题目1047--删除字符串中的所有相邻重复项

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

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

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

示例:

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

思路:

本题要删除相邻相同元素,相对于20--有效的括号来说其实也是匹配问题,20. 有效的括号 是匹配左右括号,本题是匹配相邻元素,最后都是做消除的操作。

本题也是用栈来解决的经典题目。

那么栈里应该放的是什么元素呢?

我们在删除相邻重复项的时候,其实就是要知道当前遍历的这个元素,我们在前一位是不是遍历过一样数值的元素,那么如何记录前面遍历过的元素呢?

所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。

然后再去做对应的消除操作。 如动画所示:

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

从栈中弹出剩余元素,此时是字符串ac,因为从栈里弹出的元素是倒序的,所以再对字符串进行反转一下,就得到了最终的结果。

C++代码 :

class Solution {
public:
    string removeDuplicates(string s) {
        stack<char>sta;
        for (int i = 0; i < s.size(); i++)//将重复项删除,即出栈,不重复的入栈
        {
            if (sta.size() > 0 && sta.top() == s[i])
            {
                sta.pop();
            }
            else {
                sta.push(s[i]);
            }
            
        }
        s.resize(sta.size());
        for (int i = s.size()-1; i >= 0; i--)//这里由于栈是先出后进,所以我们要从字符串的末尾开 
                                             //始赋值
        {
            s[i] = sta.top();
            sta.pop();
        }
        return s;
    }
};

相关推荐

  1. LeetCode1047删除字符串所有相邻重复

    2023-12-28 15:10:02       44 阅读
  2. Leetcode 1047删除字符串所有相邻重复

    2023-12-28 15:10:02       41 阅读
  3. 1209.删除字符串所有相邻重复 II

    2023-12-28 15:10:02       24 阅读
  4. 算法:删除字符串所有相邻重复

    2023-12-28 15:10:02       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-28 15:10:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-28 15:10:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-28 15:10:02       82 阅读
  4. Python语言-面向对象

    2023-12-28 15:10:02       91 阅读

热门阅读

  1. go语言10进制与16进制转换

    2023-12-28 15:10:02       56 阅读
  2. 关于:网络安全

    2023-12-28 15:10:02       55 阅读
  3. mysql导入tab符号txt文件到数据库

    2023-12-28 15:10:02       52 阅读
  4. Vue.js

    Vue.js

    2023-12-28 15:10:02      41 阅读
  5. 如何判断网站服务器的访问承载量?

    2023-12-28 15:10:02       54 阅读
  6. html隐藏元素的方法

    2023-12-28 15:10:02       55 阅读
  7. Tomcat使用手册

    2023-12-28 15:10:02       45 阅读
  8. CSS标准盒子模型和怪异盒子模型

    2023-12-28 15:10:02       53 阅读
  9. 自然语言处理(NLP)技术

    2023-12-28 15:10:02       58 阅读
  10. Linux用wget/curl 发起post请求

    2023-12-28 15:10:02       57 阅读
  11. Leetcode4-唯一元素的和(1748)

    2023-12-28 15:10:02       46 阅读
  12. 树莓派非常实用的程序-1 tvservice

    2023-12-28 15:10:02       51 阅读
  13. Qt+opencv 视频分解为图片

    2023-12-28 15:10:02       67 阅读
  14. uniapp 设置某个页面横屏显示

    2023-12-28 15:10:02       55 阅读