【刷题】leetcode 1544.整理字符串

在这里插入图片描述

刷题

  • 1544.整理字符串
    • 思路一(模拟栈速解版)
    • 思路二 (原地算法巧解版)
    • 思路三(C++栈版)
  • Thanks♪(・ω・)ノ谢谢阅读!!!
  • 下一篇文章见!!!

1544.整理字符串

来看题目描述
在这里插入图片描述
我看到本题的第一想法是双指针法,但是我所构想的逻辑无法达到目的,具体来说我采用前后指针,依次前进,然后满足条件就跳过,这样就导致会忽略许多满足的结构,就让我十分头疼,调试了半天还是不行,甚至想要使用三指针,四指针…服啦!结果表明都是不行的。下面来一起看看正确解法吧

思路一(模拟栈速解版)

这个和括号匹配问题很像,把字符串依次入栈,然后满足条件的就一起消除,主要就用到栈的压栈操作和取栈顶操作。这样一 一匹配就能达到要求。来看图解:
在这里插入图片描述
按照栈的方法很快速的就解决了问题,所以选择真的大于努力,这个问题选择栈就能快速解决,要是使用多指针就深陷泥潭了,来看代码实现:

char* makeGood(char* s) {if (*s == '\0') return s;if (*(s + 1) == '\0') return s;int top = 0;// 使用栈的思想char* ret = (char*)malloc(sizeof(char) * 100);char* cur = s;ret[top] = ' ';//依次入栈 并检查是否与栈顶元素符合条件while (*cur != '\0') {if (abs(ret[top] - *cur) == abs('A' - 'a')) {ret[top] = '\0';top--;cur++;}else {top++;ret[top] = *cur;cur++;}}//切记数组结尾加入 ‘\0’ret[++top] = '\0';return ret + 1;
}

来看效果:
在这里插入图片描述
顺利通过!!! 大声欢呼:过啦!!!!!!!

思路二 (原地算法巧解版)

这个思路十分奇妙的一个算法,空间复杂度为O(1),可以说是非常非常牛了。
那具体是如何操作的呢???

  1. 首先定义双指针 i j 分别指向头和头的下一个位置。
  2. 设置循环,j 遍历到尾结束。
  3. 开始判断,如果不满足条件 (互不为大小写并且 i 不等于-1)则 s[++i] = s[ j++ ] (关键一步)否则 i–。
  4. 依次往复,就可以完成任务。

只看思路似乎迷迷糊糊,这是如何做到的???下面我们来图解一下:
在这里插入图片描述
我们来逐步分析:
首先为什么这样可以做到整理字符串?
该操作类似于原地删除,一旦符合条件,i-- j++ 直接把他们就跳过了,然后如果不满足条件,就将 j 指向的内容拷贝到 i 位置,
然后继续判断。这样就可以完成操作了。
其次是为什么要加入i == -1 ???
因为会遇到前面全部被删除的情况,所以要加入i == -1。
来看代码实现:

char * makeGood(char * s){int i = 0, j = 1;//开始遍历while(j < strlen(s)){if(i == -1 ||  abs(s[i] - s[j]) != abs('A' - 'a')){s[++i] = s[j++];}//相当于删除元素else{i--;j++;}}s[++i] = '\0';return s;
}

来看效果:
在这里插入图片描述
非常好!!! 过啦!!!!!!!

思路三(C++栈版)

我们来看C++栈的写法,思路与思路一致:

void dfs(struct TreeNode *node, bool *color) {color[node->val] = true;if (node->left ) dfs(node->left , color);if (node->right) dfs(node->right, color);
}
int numColor(struct TreeNode* root){bool *color = (bool *)calloc(1, sizeof(bool) * 1001);int ans = 0;dfs(root, color);for (int i = 1; i < 1001; ++ i)if (color[i]) ++ ans;return ans;
}作者:_G_
链接:https://leetcode.cn/problems/sZ59z6/solutions/2580610/shen-du-you-xian-sou-suo-by-admiring-men-2rzv/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

思路很舒畅~

Thanks♪(・ω・)ノ谢谢阅读!!!

下一篇文章见!!!

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

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

相关文章

“快递单号时效调整秘籍:轻松掌握,高效管理!“

亲爱的物流管理者们&#xff0c;您是否曾遇到过这样的问题&#xff1a;快递单号时效单位不符合您的实际需求&#xff0c;导致管理效率低下&#xff0c;无法准确追踪物流信息&#xff1f;现在&#xff0c;我们为您带来一份快递单号时效单位调整秘籍&#xff0c;让您轻松掌握&…

第三百六十七回

文章目录 1. 概念介绍2. 方法与细节2.1 获取方法2.2 使用细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取当前系统语言"相关的内容&#xff0c;本章回中将介绍如何获取时间戳.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…

http协议基础与Apache的简单介绍

一、相关介绍&#xff1a; 互联网&#xff1a;是网络的网络&#xff0c;是所有类型网络的母集因特网&#xff1a;世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上&#xff0c;大家把连接在因特网上的计算机都成为主机。万维网&#xff1a;WWW&#xff08;world…

mysql order by布尔盲注

什么是order by 在MySQL支持使用ORDER BY语句对查询结果集进行排序处理&#xff0c;使用ORDER BY语句不仅支持对单列数据的排序&#xff0c;还支持对数据表中多列数据的排序。语法格式如下 select * from 表名 order by 列名(或者数字) asc&#xff1b;升序(默认升序) selec…

ONLYOFFICE 桌面应用程序 v8.0 引入令人惊叹的全新界面、本地主题和Moodle 集成等更新!

前言 官网链接&#xff1a; ONLYOFFICE 官方网址 ​ 感谢您对ONLYOFFICE桌面应用程序的关注&#xff01;ONLYOFFICE桌面应用程序是一款功能强大、易于使用的办公套件&#xff0c;它可以帮助您实现高效的文档处理、电子表格编辑和演示文稿设计。 无论您是个人用户还是企业用户…

Sqlite数据库详解

1.关于Sqlite SQLite 是一个进程内库&#xff0c;它实现了一个独立的、无服务器的、零配置的事务性 SQL 数据库引擎。 SQLite的代码属于公共领域&#xff0c;因此对 用于任何目的&#xff0c;商业或私人目的。 SQLite是世界上部署最广泛的数据库 应用程序比我们能做的要多 计数…

分披萨 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 “吃货”和“馋嘴”两人到披萨店点了一份铁盘(圆形)披萨&#xff0c;并嘱咐店员将披萨按放射状切成大小相同的偶数个小块。 但是粗心服务员将披萨切成了每块大小…

【c语言】字符函数和字符串函数(上)

前言 在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了⽅便操作字符和字符串&#xff0c;C语⾔标准库中提供了⼀系列库函数~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 1. 字符分…

@ 代码随想录算法训练营第9周(C语言)|Day62(单调栈)

代码随想录算法训练营第9周&#xff08;C语言&#xff09;|Day62&#xff08;单调栈&#xff09; Day25、回溯&#xff08;包含题目 739. 每日温度 496.下一个更大元素 I &#xff09; 739. 每日温度 题目描述 请根据每日 气温 列表&#xff0c;重新生成一个列表。对应位置…

前端有哪些实现埋点、性能监控、告警的方式

前端错误监控&#xff1a; 通过监控前端错误来捕获客户端的异常和错误。可以使用第三方服务如Sentry、Bugsnag、Rollbar等&#xff0c;或者自行实现错误监控系统。 性能监控&#xff1a; 监控页面加载时间、资源加载时间、渲染时间等性能指标&#xff0c;以及页面的可交互性能…

Vue 卸载eslint

卸载依赖 npm uninstall eslint --save 然后 进入package.json中&#xff0c;删除残留信息。 否则在执行卸载后&#xff0c;运行会报错。 之后再起项目。

pthread_exit和pehread_join函数

pthread_exit&#xff1a; 在线程中禁止调用exit函数&#xff0c;否则会导致整个进程退出&#xff0c;取而代之的是调用pthread_exit函数&#xff0c;这个函数只会使一个线程退出&#xff0c;如果主线程使用pthread_exit函数也不会使整个进程退出&#xff0c;不会影响其他线程…

扫描TestNG框架编写的自动化用例确认其中是否包含断言的方法

在测试工作中&#xff0c;要确认TestNG框架编写的自动化用例中是否包含断言&#xff0c;我们可以使用一些静态代码分析工具。静态代码分析工具可以在不执行代码的情况下检查代码&#xff0c;发现可能的错误、代码异味或者不符合编码规范的地方。对于TestNG框架&#xff0c;一种…

Python元组详细教程

Python中的元组&#xff08;tuple&#xff09;是一种不可变的有序序列类型&#xff0c;用于存储多个值。由于元组是不可变的&#xff0c;因此你不能修改元组中的元素&#xff0c;但你可以访问和操作元组中的元素。 创建元组 你可以使用圆括号 () 来创建元组&#xff0c;元组中…

新媒体运营-定位及呈现方式篇

常见呈现方式:真人口述、小剧情、记录(边走边说)、Vlog+场景、画外音+场景、视频/图+文案 标题 是写给潜在客户看的, 内容 是给我们的目标用户看的。 01 要有核心内容 写文案从模仿开始,依样画葫芦 然后形成一套顺手的体系公式 02 要方便用户搜索 关键词、话题、连带关联词…

【JavaScript 漫游】【022】事件模型

文章简介 本篇文章为【JavaScript 漫游】专栏的第 022 篇文章&#xff0c;对 JavaScript 中事件模型相关的知识点进行了总结。 监听函数 浏览器的事件模型&#xff0c;就是通过监听函数&#xff08;listener&#xff09;对事件做出反应。事件发生后&#xff0c;浏览器监听到…

2.23日学习打卡----初学Nginx(二)

2.23日学习打卡 目录: 2.23日学习打卡一. Nginx 虚拟主机虚拟主机的分类Nginx支持三种类型的虚拟主机配置Nginx虚拟主机单网卡多IP配置Nginx虚拟主机_基于域名虚拟主机配置Nginx虚拟主机基于多端口的配置4 二. Nginx 核心指令root和alias指令的区别return指令rewrite指令rewrit…

MySQL-行转列,链接查询

1. 行转列 1.1 示例数据准备 create table test_9(id int,name varchar(22),course varchar(22),score decimal(18,2) ); insert into test_9 (id,name,course,score)values(1,小王,java,99); insert into test_9 (id,name,course,score)values(2,小张,java,89.2); inse…

【MATLAB源码-第148期】基于matlab的BP神经网络2/4ASK,2/4FSK,2/4PSK信号识别仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 调制技术基础 调制技术是通信技术中的基础&#xff0c;它允许数据通过无线电波或其他形式的信号进行传输。调制可以根据信号的振幅、频率或相位的变化来进行&#xff0c;分别对应于ASK、FSK和PSK。 1.1 2ASK与4ASK 振幅…

西宾视频下载工具(mediadown)

一个支持多网站的视频下载工具。目前已经支持的网站有知乎、哔哩哔哩、得到、猫耳、蜻蜓FM。 西宾视频下载工具能够帮助你下载知乎知学堂、哔哩哔哩、得到课程、猫耳音频、蜻蜓FM的音视频文件。如果你是这些网站的会员&#xff0c;它还能帮你下载会员节目的音视频。 工具也不是…