每日一题——删除字符串中的所有相邻重复项

news2024/12/25 2:12:16

每日一题

删除字符串中的所有相邻重复项

题目链接

在这里插入图片描述

思路

  • 这是一道用解决的典型题目

  • 我们先来看看栈的基本性质:

    • 栈:是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素的操作。进行数据插入和删除操作的一端称为栈顶,另一端为栈底

    • 栈中的数据元素遵守后进先出原则

    • 压栈:栈的插入操作称为进栈/压栈/入栈,其位置在栈顶

    • 出栈:栈的删除操作称为出栈,其位置也在栈顶

      在这里插入图片描述

  • 这题其实和有效括号序列类似,都是对字符进行匹配,如果匹配成功那就进行删除

  • 而这题匹配成功的条件就是相邻的两个字符是相等的,那么我们就可以用一个循环,来遍历整个字符串,然后再将每次遍历的字符和前一个字符进行比较,如果相等就删除。

  • 那么,我们怎么保存遍历字符的前面一个元素呢?就是用的栈

    • 遍历字符串,如果栈为空或遍历的字符与前面的不相等,那就将这个字符入栈
    • 否则,如果与前面的字符(栈顶元素)相等,那就将栈顶元素出栈(即相当于匹配成功,将这两个字符删除)
  • 我们以字符串“abbaca”为例,看一下完整的过程:

    在这里插入图片描述

实现代码

char * removeDuplicates(char * s){
    int len = strlen(s);
    
    char* stack = (char *)malloc(sizeof(char) * (len + 1));	//申请返回的字符串的内存
    int top = 0;	//栈顶指针置零
    
    for(int i = 0; i < len; i++)
    {
        //如果栈不为空或遍历元素等于栈顶元素,出栈
        if(top > 0 && s[i] == stack[top - 1])
            top--;
        //否则,入栈
        else
            stack[top++] = s[i];
    }
    
    stack[top] = 0;	//确定新字符串结束位置
    
    return stack;	//返回新的字符串
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/585159.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决Github上传或者下载时失败的问题

总是出现push不到GitHub的问题, 这里来记录一下每次的解决方法 文章目录 2023年05月28日出现问题2023年05月28日再次出现问题2023年05月29日出现问题 2023年05月28日出现问题 push代码时出现如下图所示的错误 Failed to connect to 127.0.0.1 port 1080 after 2052 ms: Conne…

08.Stack和Queue

栈&#xff1a;先进后出 队列&#xff1a;先进先出 JVM的栈就是平常所说的一块内存。 此处所说的栈是数据结构 1. 栈(Stack) 1.1 概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶&…

迪赛智慧数——柱状图(基本柱状图):全国美食类门店TOP10地区

效果图 中国“最会吃”的省份&#xff0c;广东榜上有名&#xff0c;看看有你的家乡吗? 广东美食门店开店数量保持较好状态&#xff0c;重庆、上海、北京、天津开店率在5%以上。广东拥有众多的美食文化&#xff0c;美食门店数量也是全国最多的省份有99万家美食门店&#xff0c…

SpringBoot SSE服务端主动推送事件详解

一、SSE概述 1、SSE简介 SSE(Server Sent Event)&#xff0c;直译为服务器发送事件&#xff0c;也就是服务器主动发送事件&#xff0c;客户端可以获取到服务器发送的事件。 我们常见的 http 交互方式是客户端发起请求&#xff0c;服务端响应&#xff0c;然后一次请求完毕。但是…

Centos 7安装python 3.9.10

概述 Python是一种高级编程语言&#xff0c;它具有简单易学、可读性强、代码简洁等特点。Python由Guido van Rossum于1991年创造&#xff0c;最初被用作一种教学语言&#xff0c;但现在已经成为一种通用的编程语言。 Python支持多种编程范式&#xff0c;包括面向对象编程、函数…

如何运用R语言进行Meta分析在【文献计量分析、贝叶斯、机器学习等】多技术的融合

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

【MySQL】MySql的底层数据结构

文章目录 前言索引结构及查找算法不适合做MySql的数据结构及其原因 一、BTree和BTree的引出1.1 BTree数据结构2.2 BTree数据结构 二、计算m阶&#xff0c;即BTree该取多少合适总结 前言 索引结构及查找算法 一个sql语句在mysql里究竟是如何运行的呢&#xff1f;又是怎么去查找…

如何在Linux系统中使用SCP命令传输文件和文件夹?

在Linux系统中&#xff0c;SCP&#xff08;Secure Copy&#xff09;是一种用于在本地和远程主机之间安全传输文件和文件夹的命令行工具。它基于SSH协议&#xff0c;并提供了加密和身份验证机制&#xff0c;确保数据的安全性和完整性。 本文将详细介绍如何使用SCP命令在Linux系统…

如何通过pytest进行更改自动化测试用例的执行顺序?

前言 在自动化测试中&#xff0c;自动化测试用例设计原则就是执行过程时不能存在依赖顺序&#xff0c;那么如果测试用例需要按照指定顺序执行&#xff0c;这个时候应该怎么做呢&#xff1f;目前单元测试框架中unittest没有办法改变测试用例的执行顺序&#xff0c;但是另一个单…

北京发布Web3.0白皮书!币圈扬言:国际金融格局即将重塑!

如今&#xff0c;虚拟资产已成为香港数字经济与金融创新的“桥头堡”。随着加密新政生效在即&#xff0c;市场暗流涌动&#xff0c;头部交易所争相布局&#xff0c;香港或将迎来新一轮的加密竞争。 多家交易所进军香港 5月28日&#xff0c;欧易&#xff08;OKX&#xff09;完成…

浅谈兼容性测试点和注意项

一&#xff1a;兼容性测试的概念&#xff1a;就是验证开发出来的程序在特定的运行环境中与特定的软件、硬件或数据相组合是否能正常运行、有无异常的测试过程。 二&#xff1a;兼容性测试的分类&#xff1a; &#xff08;1&#xff09;浏览器兼容性测试 指的是在浏览器上检…

one-stage目标检测方法

YOLO系列算法 从区域推荐到端到端 RCNN系列的方法和核心思想在于&#xff1a;先找出可能存在物体的区域&#xff0c;再确认物体的存在 这种思路归根溯源&#xff0c;来自传统的目标检测算法。 为了解决传统方法中的滑动窗口的方式&#xff0c;来找出可能存在目标的区域&…

自学软件测试到什么程度才可以去找工作...拿到阿里offer后才知道有这些就够了!!

如果是纯自学&#xff0c;建议先自学软件测试基础、功能测试等&#xff0c;然后找一个相关的工作&#xff0c;在工作中&#xff0c;边增长项目经验&#xff0c;边自学更难一点的自动化编程、性能测试等。自动化测试、性能测试如果没有老师带&#xff0c;自学的难度比较大&#…

uniapp 使用自定义icon图标

1.下载图标文件 阿里图标库位置&#xff1a;iconfont-阿里巴巴矢量图标库 eg: 搜索 “书签” 图标&#xff0c;点击加入购物车&#xff0c;再进入购物车&#xff0c;填写加入项目&#xff0c;也可以直接下载&#xff0c;点击编辑 编辑可以设置图片颜色&#xff0c;或像素大小…

immutable深拷贝:数据多层属性-不可变数据结构

一、为何要用immutable深拷贝&#xff1f; 1.浅拷贝&#xff08;浅复制&#xff09; //引用赋值-浅复制、浅拷贝 var obj{name:"溜溜球"}var obj2obj;obj2.name"刘刘球";console.log(obj);//name:"刘刘球"console.log(obj2);//name:"刘刘…

[C++][opencv]opencv填充透明色到不规则polygon区域

大家用yolov5-seg分割都知道官方演示分割结果会把分割区域半透明填充到原图里面&#xff0c;那么C如何实现呢。今天特地研究了下。由于分割点是变动的&#xff0c;所以我们需要用变量控制分割点数。 参考文章写的很不错&#xff0c;但是有个毛病&#xff0c;他这个是5点必须是…

MySQL---JDBC基础操作、SQL注入

1. JDBC JDBC&#xff08;Java DataBase Connectivity,java数据库连接&#xff09;是一种用于执行SQL语句的Java API。 JDBC是Java访问数据库的标准规范&#xff0c;可以为不同的关系型数据库提供统一访问&#xff0c;它由一组用Java 语言编写的接口和类组成。 JDBC需要连接…

unreal 5.1 增强输入实现

在ue5.1版本增加了增强输入&#xff0c;并且废弃了之前的轴映射和操作映射。 官方文档地址&#xff1a;https://docs.unrealengine.com/5.1/zh-CN/enhanced-input-in-unreal-engine/ 输入动作&#xff08;Input Actions&#xff09; 更改后的区别我体验下来&#xff0c;它将…

探索 PlanetIX:解读区块链游戏运营的奥秘

作者: danielfootprint.network 熊市之中&#xff0c;PlanetIX 成长为最强的 Web3 游戏&#xff0c;在 Polygon 网络上独占鳌头。而其开发团队深度使用了 Footprint Analtics 的零代码数据分析平台和-GameFi 的数据 API 来提升用户的游戏体验。 近日&#xff0c;Footprint 与…

Visual Studio添加native tools command prompt

学习UEFI开发&#xff0c;环境设置种需要用到native tools command prompt&#xff0c;但是看了一下VS2017的Tools菜单下没有这个选项。网上查询&#xff0c;解决了问题&#xff1a; Tools > External Tools > Add Title:VS Command PromptCommand:C:\Windows\System32\…