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

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

本章完。

相关推荐
Hello.Reader1 小时前
算法基础(十一)—— 递归树如何看懂分治算法的运行时间
java·算法·排序算法
郝学胜-神的一滴1 小时前
二叉树与递归:解锁高级数据结构的编程内功心法
开发语言·数据结构·c++·算法·面试
潇湘散客1 小时前
CAX软件插件化设计实战:从框架到3D基础功能落地
c++·图形学·opengl
大袁同学1 小时前
【线程】:在并发的荒原上构筑秩序
linux·c++·线程
无限进步_1 小时前
【C++】深入右值引用:移动语义与完美转发
java·开发语言·c++
csdn_aspnet1 小时前
C++ (Naive Partition Algorithm)朴素划分算法
数据结构·c++·算法
eggrall1 小时前
找到字符串中所有字母异位词(medium)
算法·leetcode·职场和发展
c++之路1 小时前
单例模式(Singleton Pattern)
开发语言·c++·单例模式
_日拱一卒1 小时前
LeetCode:230二叉搜索树中第K小的元素
算法