力扣算法:用栈消消乐,巧解相邻重复与退格字符串

上篇文章:【Linux进程间通信】硬核剖析:消息队列、信号量、内核IPC资源统一管理与mmap加餐

目录

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

理解题意

算法原理

代码

2.比较含退格的字符串

理解题意

算法原理

代码


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

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

理解题意

删除两个相邻的重复项字母,保证最终答案唯一。

算法原理

本题更像是消消乐一样,每次消去相同字母。也就类似于将字符串放入一个栈中,只要字母入栈后有相同的就出栈,知道最终剩余唯一字母,再将其全部出栈再翻转即可,如下图:

而本题的栈也可以直接使用数组模拟这个栈结构,好处就是模拟完毕后,数组里面存的就是最终结果。

代码

cpp 复制代码
class Solution {
public:
    string removeDuplicates(string s) 
    {
        string ret;
        for(auto ch : s)
        {
            if(ret.size() && ch == ret.back())
                ret.pop_back();
            else
                ret += ch;
        }
        return ret;
    }
};

2.比较含退格的字符串

https://leetcode.cn/problems/backspace-string-compare/description/

理解题意

算法原理

原理同上一题相同,自己再试着做一下吧

代码

cpp 复制代码
class Solution {
public:
    bool backspaceCompare(string s, string t) {
        return changeStr(s) == changeStr(t);
    }

    string changeStr(string& s)
    {
        string ret;
        for(char ch : s)
        {
            if(ch != '#')
                ret += ch;
            else
                if(ret.size()) ret.pop_back();               
        }
        return ret;
    }
};

本章完。

相关推荐
法哥20129 小时前
用 C++ 控制 CMW100,到底在干什么?
开发语言·c++
典典分享指南9 小时前
VS Code Git 工作树:解锁多分支并行开发新体验
算法·决策树·逻辑回归·启发式算法
_Narcissus_10 小时前
枚举和模拟算法笔记
c语言·数据结构·c++·笔记·算法·模拟·枚举
天疆说10 小时前
策略的进化:从随心所欲到稳健前行
算法
冻柠檬飞冰走茶10 小时前
《数据结构实验指导-C++语言版》 在顺序表 list 中查找元素 x
开发语言·数据结构·c++·算法·list
Brilliantwxx10 小时前
【C++】 高阶数据结构图(1)并查集
开发语言·数据结构·c++
小鱼仙官10 小时前
Ubuntu C++ NTP校时程序
linux·c++·ubuntu
happyprince11 小时前
03-深刻观-CodeX哲学与升华(源码)
算法·ai编程
不会打球的王子11 小时前
Day 27:迁移学习与微调 — 站在巨人的肩膀上
算法
老当益壮梁奶奶11 小时前
Linux软件编程学习笔记(二)Linux文件IO编程入门:从fopen到fgetc
linux·c语言·c++·笔记·学习