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

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

本章完。

相关推荐
地平线开发者3 小时前
profiler debug 工具用法与高一致性策略
算法·自动驾驶
编程大师哥3 小时前
匿名函数 lambda + 高阶函数
java·python·算法
我叫袁小陌3 小时前
算法解题思路指南
算法
MC皮蛋侠客3 小时前
C++17 多线程系列(五):C++17 并行算法——从串行到并行的零成本迁移
c++·多线程
地平线开发者3 小时前
Conv+BN+Add+ReLU 融合机制简介
算法·自动驾驶
yuanyuan2o23 小时前
模型预训练:Hugging Face Transformers 基础
算法·ai·语言模型·自然语言处理·nlp·深度优先
杨充3 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
妄想出头的工业炼药师4 小时前
GS slam mono
算法·开源
_日拱一卒5 小时前
LeetCode:207课程表
java·数据结构·算法·leetcode·职场和发展