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

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

本章完。

相关推荐
kisshyshy10 小时前
🍦 雪糕、食堂、火车厢:三幅漫画吃透栈、队列与链表
javascript·算法
众少成多积小致巨12 小时前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
猿人谷18 小时前
不只是 CPU 阈值:STAR 如何用 GAT + Transformer 做容器级自动扩缩容?
人工智能·算法
复杂网络19 小时前
Stable Diffusion 视觉大模型微调技术深度调研
算法
复杂网络19 小时前
基于 Stable Diffusion 架构的视觉大模型代表性工作与原理深度解析
算法
MrZhao40019 小时前
Agent Loop 如何用 Hook 扩展:权限、日志与工具拦截
算法
MrZhao40019 小时前
Agent 为什么需要 Skills:别把所有知识都塞进 system prompt
算法
JieE2122 天前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
JieE2123 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack204 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法