首页 > 其他分享 >删除字符串中的所有相邻重复项--栈与队列

删除字符串中的所有相邻重复项--栈与队列

时间:2024-11-17 11:40:19浏览次数:1  
标签:string -- pop 队列 result str 字符串 myStack

第一版的代码如下下:

点击查看代码
class Solution
{
public:
    string removeDuplicates(string s)
    {
        stack<char> str;
        for (int i = 0; i < s.size(); i++)
        {
            //要先判断才能进行压栈,再次记住栈一定要先判断是否为空
            if (str.empty() || s[i] != str.top())
            {
                str.push(s[i]);
            }else
            {
                str.pop();
            }
        }
        string t = "";
        /*在 while 循环中,您尝试通过 t[j] 的方式来给字符串 t 赋值。
        但是,这样的方式会导致字符串 t 的长度不断增加,并且超出了原先的
        长度。这会导致访问超出字符串 t 的范围,产生未定义的行为。正确的
        做法是使用 push_back() 方法将字符逐个添加到字符串末尾。
        /*int j = 0;
        while (!str.empty())
        {
            t[j] = str.top();
            str.pop();
            j++;
            在 C++ 中,字符串对象是一个动态分配的字符数组,它的大小可以动态增长以容纳新的字符。
        }*/
        while (!str.empty()) { // 将栈中元素放到result字符串汇总
            t += str.top();
            str.pop();
        }
        reverse(t.begin(),t.end());
        return t;
    }
};
然后是第二次的记录
点击查看代码
class Solution {
public:
    string removeDuplicates(string s) {
        //先压进去然后看开头和将要压进去的是否一样,然后循环
        //最终剩下的再出栈就是最终的字符串
        int size = s.size();
        stack<char> myStack;
        for(int i = 0;i < size; i++){
            if(!myStack.empty()){
                if(myStack.top() == s[i]){
                    myStack.pop();
                    continue;
                }
            }
            myStack.push(s[i]);
        }
        string result;
        while(!myStack.empty()){
            result += myStack.top();
            myStack.pop();
        }//注意栈是先进后出的这个顺序是反的
        reverse(result.begin(), result.end());
        return result;
    }
};
感觉第二次写的比第一次更加简单,注意一下swap和reverse的使用,前者两两交换元素的值,后者交换范围内的指定值。

标签:string,--,pop,队列,result,str,字符串,myStack
From: https://www.cnblogs.com/peishouhao/p/18550386

相关文章

  • # 学期2024-2025-1 学号(20241405) 《计算机基础与程序设计》第8周学习总结
    作业信息|这个作业属于哪个课程|https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP||这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08||这个作业的目标|功能设计与面向对象设计,面向对象设计过程,面向对象语言三要素,汇编、编译、解释、执行||作......
  • python岭迹图绘制函数
    一.岭迹图是什么?    岭迹图(RidgeTracePlot)是一种可视化工具,用于展示岭回归中正则化参数($\alpha$)对回归系数的影响。它能帮助我们理解特征的稳定性和正则化在控制模型复杂度中的作用。二.什么时候需要看岭迹图?存在共线性特征时当特征间高度相关,普通最小二乘法(OLS)......
  • 241117-欧几里得空间与非欧几里得空间
    欧几里得空间和非欧几里得空间是描述几何学中不同类型空间的概念,用来解释我们对空间的理解方式。它们在日常生活、物理学和数学中有着重要的应用。下面我将用简单的语言来介绍这两个概念。欧几里得空间欧几里得空间是我们最熟悉的几何空间,它是基于古希腊数学家欧几里得提出的几......
  • 探索训练人工智能模型的词汇大小与模型的维度
    前一篇:《人工智能同样也会读死书----“过拟合”》序言:你看,人工智能领域的专家都在做什么?他们其实只是在不断试错,因为并没有一种“万能药”——一种万能的算法可以一次性设计出任何人工智能大模型来实现客户的需求。所有的模型在设计和训练过程中都是——验证结构——修改架构—......
  • python爬虫爬取网页中文乱码问题的解决
    一:遇到的问题1.代码点击查看代码importrequestsifname=='main':#指定URLurl='https://xxxxxx'#发送请求1.page_text=requests.get(url,headers=headers).text#打印print(page_text)2.返回的网页内容点击查看代码#省略的代码第ä¸å·宴æ¡......
  • userService源代码
    @Slf4j@Service("userService")publicclassUserServiceImplimplementsUserService{@AutowiredprivateFinTechDataProviderServicefinTechDataProviderService;@AutowiredprivateUserConfigMapperuserConfigMapper;@AutowiredprivateUserDepart......
  • 用WgServerforWindows异地组网记录
    1、安装和配置参考——用windows做wireguard服务端wireguardforwindows异地组网新妙招2、现在网络结构是这样的:一台公网vps充当wg的中转服务器,安装了WgServerforWindows(版本号:2.0.11)办公环境用wireguard的windows客户端进行连接,家中的wireguard客户端是用了路由器Immortal......
  • 北美竞赛-加拿大计算机竞赛CCC-收获滑铁卢
     给定一个 R×CR×C 的方格矩阵。矩阵左上角方格坐标为 (0,0)(0,0),右下角方格坐标为 (R−1,C−1)(R−1,C−1)。每个方格中要么有南瓜,要么有干草。南瓜分为大、中、小三种。初始时,一个农民位于方格 (A,B)(A,B)。他可以朝上下左右四个方向自由移动,但是他不能走出矩阵,也......
  • Springboot计算机毕业设计课程管理系统的设计与实现v9g4e
    Springboot计算机毕业设计课程管理系统的设计与实现v9g4e本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:学生,教师,课程信息,学生选课,取消选课,课程成绩,学生请假,教师评价,学生评价开题报告内容......
  • 丹摩征文活动|丹摩助力selenium实现大麦网抢票
    丹摩征文活动|丹摩助力selenium实现大麦网抢票1.引言在人工智能飞速发展的今天,丹摩智算平台(DAMODEL)以其卓越的AI算力服务脱颖而出,为开发者提供了一个简化AI开发流程的强大工具。通过租赁GPU资源,丹摩智算平台使得机器学习和深度学习项目的开发变得更加高效和便捷。本文将详......