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

上篇文章:【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;
    }
};

本章完。

相关推荐
weixin_424183614 小时前
开放—封闭原则实战(下):基于策略的流程编排与编译期多态
c++·分布式·系统架构
wuminyu5 小时前
C++协程实现接收端的零拷贝Buffer管理原理剖析
java·linux·c语言·jvm·c++
小蒋学算法5 小时前
算法-交替删除操作后最后剩下的整数-跟着灵茶山艾府学算法
数据结构·算法
m0_380743875 小时前
C++中的freopen的用法实例详解
开发语言·c++
荆棘鸟智能5 小时前
林业遥感长势评估怎么做?从NDVI时序分析到LiDAR蓄积量回归
人工智能·算法·智慧林业
jimy16 小时前
polymorph.cpp里面的“析构函数、智能指针”问题
开发语言·c++
hhb_6186 小时前
AIRAGDebug:一键定位RAG链路异常
人工智能·python·算法
朝朝辞暮i6 小时前
C++ 第 6 课:switch —— 多状态选择
开发语言·c++·算法
朝朝辞暮i7 小时前
C++ 第 4 课:if / else —— 让程序自己做决定
开发语言·c++
苏打豆7 小时前
Pinocchio源码阅读——刚体运动物理量空间变换及求导
c++·线性代数·算法·矩阵·机器人