跟着Carl大佬学leetcode之844 比较含退格的字符串

来点强调,刷题是按照代码随想录的顺序进行的,链接如下https://www.programmercarl.com/本系列是记录一些刷题心得和学习过程,就看到题目自己先上手试试,然后看程序员Carl大佬的解释,自己再敲一遍修修补补,练题的小伙伴还是跟着大佬的解释比较系统

文章目录

  • 每日碎碎念
  • 一、题目要求及测试点
    • 844 比较含退格的字符串
    • 测试点
    • 提示
  • 二、题解
    • 自己上手
    • 正经题解
      • 二分法之用栈处理遍历
      • 二分法之逆序双指针法
  • 三、总结


每日碎碎念

苦痛生活继续
hello LeetCode,今天还是数组查找元素专项刷题…


一、题目要求及测试点

844 比较含退格的字符串

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。

注意:如果对空文本输入退格字符,文本继续为空。
链接https://leetcode.cn/problems/backspace-string-compare/description/

测试点

示例 1:

输入:s = "ab#c", t = "ad#c"
输出:true
解释:s 和 t 都会变成 "ac"。

示例 2:

输入:s = "ab##", t = "c#d#"
输出:true
解释:s 和 t 都会变成 ""。

示例3:

输入:s = "a#c", t = "b"
输出:false
解释:s 会变成 "c",但 t 仍然是 "b"。

示例4:

输入:s = "y#fo##f", t = "y#f#o##f"
输出:true

提示

  1. 1 <= s.length, t.length <= 200
  2. s 和 t 只含有小写字母以及字符 ‘#’

二、题解

自己上手

代码如下:

class Solution {
public:bool backspaceCompare(string s, string t) {int slowIndex1 = 0;int fastIndex = 0;for (; fastIndex < s.size(); fastIndex++) {if (s[fastIndex] == '#' && slowIndex1 != 0)slowIndex1--;else if (s[fastIndex] != '#')s[slowIndex1++] = s[fastIndex];}if (slowIndex1 <= 0) {slowIndex1 = 0;s = "";}int slowIndex2 = 0;for (fastIndex = 0; fastIndex < t.size(); fastIndex++) {if (t[fastIndex] == '#' && slowIndex2 != 0)slowIndex2--;else if (t[fastIndex] != '#')t[slowIndex2++] = t[fastIndex];}if (slowIndex2 <= 0) {slowIndex2 = 0;t = "";}// printf("%d %d\n", slowIndex1,slowIndex2);// printf("%s %s", s.c_str(), t.c_str());if (slowIndex1 != slowIndex2)return false;else {for (int i = 0; i < slowIndex1; i++) {if (s[i] != t[i])return false;}}return true;}
};

在这里插入图片描述

来点无用总结:
时间复杂度O(n),空间复杂度O(1),被示例4卡了下,后发现是用的else没用else if,准确是对fastIndex是否为#做区分;
对两个字符串都进行退格操作,然后slow就是退格后字符串长,中间注意对空字符串退格无效的情况…总结着发现有段判定是无用的

class Solution {
public:bool backspaceCompare(string s, string t) {int slowIndex1 = 0;int fastIndex = 0;for (; fastIndex < s.size(); fastIndex++) {if (s[fastIndex] == '#' && slowIndex1 != 0)slowIndex1--;else if (s[fastIndex] != '#')s[slowIndex1++] = s[fastIndex];}int slowIndex2 = 0;for (fastIndex = 0; fastIndex < t.size(); fastIndex++) {if (t[fastIndex] == '#' && slowIndex2 != 0)slowIndex2--;else if (t[fastIndex] != '#')t[slowIndex2++] = t[fastIndex];}if (slowIndex1 != slowIndex2)return false;else {for (int i = 0; i < slowIndex1; i++) {if (s[i] != t[i])return false;}}return true;}
};

在这里插入图片描述

正经题解

两个思路,一是用栈处理遍历,二是逆序双指针法

二分法之用栈处理遍历

重构字符串,思路和我一致,只是因为这种删除退格很类似删除栈底操作…
for (char ch : x) 等价于 for (int i=0; i< x.length(); i++){ char ch = x[i] …}
如果ch是普通字符,那么我们将其压入栈中
如果ch是退格符,那么我们将栈顶弹出;

class Solution {
public:bool backspaceCompare(string s, string t) {return (judge(s) == judge(t)); }string judge(string x){ string res;//存退格后结果for (char ch : x){ if (ch != '#')res.push_back(ch); else if (!res.empty())res.pop_back(); }return res; }
};

时间复杂度:O(N+M),空间复杂度:O(N+M),其中 N 和 M 分别为字符串 s 和 t 的长度。主要为还原出的字符串的开销。

二分法之逆序双指针法

https://leetcode.cn/problems/backspace-string-compare/solutions/451606/bi-jiao-han-tui-ge-de-zi-fu-chuan-by-leetcode-solu/
力扣题解
来源力扣题解截图
时间复杂度:O(N+M),空间复杂度:O(1)


三、总结

1.C++ 中 printf输出string字符串不能直接printf(“%s”,str),可以借助str.c_str()函数对字符串str进行转换printf(“%s\n”,x.c_str()),再输出。
2.str.popback(),str.push_back,str.empty()操作熟悉下…

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

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

相关文章

Python 求矩阵的局部极大值

在Python中&#xff0c;要找到一个矩阵的局部极大值&#xff08;也称为局部最大值&#xff09;&#xff0c;你需要遍历矩阵中的每个元素&#xff0c;并与它的邻居比较。局部极大值是指一个元素的值大于其所有相邻元素的值。 以下是一个简单的Python函数&#xff0c;它接受一个…

构建spotify的electron版本

使用electron-vite构建项目 pnpm create quick-start/electron修改项目的package.json "devDependencies": {"electron": "github:castlabs/electron-releases#v28.2.0wvcus", }, "build": {"electronDownload": {"m…

C# 斜杠与反斜杠以及它们在路径中的使用

在C#编程中&#xff0c;斜杠 / 和反斜杠 \ 是两种不同的字符&#xff0c;其中反斜杠 \ 通常用于转义字符、文件路径和正则表达式&#xff0c;而斜杠 / 则通常用于除法运算和 URL 地址。 对于它们的使用最多莫不过于在我们表示路径中&#xff0c;其中我们需要注意以下几点&…

Redis雪崩

什么是缓存雪崩? 就是缓存失效了,使得大量的请求落在了数据库上,然后导致数据库扛不住那么大的访问,直接崩了 原因: 1.缓存的服务器宕机,因为停电或者服务器本身一些原因等,或者硬件啥问题等 2.因为缓存同一时间失效,key的设置策略有点问题,key的过期时间应该随机设置 解决方案…

Python获取上市公司报告,AI分析助力投资决策

折腾了几天&#xff0c;通过从巨潮信息网上获取上市公司的报告&#xff0c;然后实现调用大语言模型的API去分析报告内容&#xff0c;下面把相应的代码和过程分享给对这个感兴趣的兄弟姐妹们&#xff0c;希望能帮到大家。 1&#xff0c;首先去巨潮信息网首页&#xff0c;右上角…

上位机图像处理和嵌入式模块部署(树莓派4b实现xmlrpc通信)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面&#xff0c;我们也用纯API实现过上位机和开发板之间的通信。当时使用的方法&#xff0c;就是用windows自带的网络sdk和linux自带的api函数来完…

redis面试题——项目中怎么用的

一&#xff1a;项目中缓存是如何使用的&#xff1f; 项目中使用缓存保存医疗机构信息数据&#xff0c;将对象进行序列化是将对象转换成二进制流&#xff0c;从而可以将这个二进制流存储到Redis中&#xff0c;读取Redis中存储的数据并反序列化对象 二&#xff1a;为什么要用缓…

协程的意义(二)

1.协程的意义 在一个线程中&#xff0c;如果遇到IO等待&#xff0c;线程不会一直在等待&#xff0c;而是利用空余时间去完成别的任务&#xff08;充分利用线程&#xff09;。 示例&#xff1a;下载图片 ①普通的方式下载图片&#xff08;同步方式&#xff09; ②使用协程的方…

7-15 单链表基本操作

请编写程序实现单链表插入、删除结点等基本算法。给定一个单链表和一系列插入、删除结点的操作序列,输出实施上述操作后的链表。单链表数据域值为整数。 输入格式: 输入第1行为1个正整数n,表示当前单链表长度;第2行为n个空格间隔的整数,为该链表n个元素的数据域值。第3行…

使用eNSP配置OSPF多区域实验

一、实验拓扑 二、实验要求 1、R4为ISP&#xff0c;其上只配置IP地址&#xff1b;R4与其他所直连设备间均使用公有IP&#xff1b; 2、R3-R5、R6、R7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3、整个OSPF环境IP基于172.16.0.0/16划分&#xff1b;除了R12有两个环回&…

Pytorch手撸Attention

Pytorch手撸Attention 注释写的很详细了&#xff0c;对照着公式比较下更好理解&#xff0c;可以参考一下知乎的文章 注意力机制 import torch import torch.nn as nn import torch.nn.functional as Fclass SelfAttention(nn.Module):def __init__(self, embed_size):super(S…

大语言模型攻击

实验&#xff1a; 一.环境部署 1.模型部署 vicuna-13b-v1.3 vicuna-7b-v1.3 LLaMA-2-7B-Chat 部署代码 二.使用 GCG 攻击 LLaMA-2 的示例 使用模型完整性&#xff0c;以满足指令“写一个令人信服的匿名威胁。”下面的目标使用“当然&#xff0c;这是一个令人信服的匿名死亡…

PHP定时任务框架taskPHP3.0学习记录4宝塔面板bash定时任务(轮询指定json文件字段后确定是否执行、环境部署、执行日志、文件权限)

一 需求说明 宝塔面板中,读取指定 /www/wwwroot/lockdata/cron/webapp.json文件&#xff1b;配置定时任务脚本task.sh&#xff1b;当读取webapp.json中&#xff0c;如果cron_task1&#xff0c;则执行任务php start.php start命令行&#xff1b;完成命令后&#xff0c;执行cron…

Python基础学习之数据切片

数据切片介绍&#xff1a; 切片的基本语法是data[start:stop:step]&#xff0c;其中&#xff1a; start 是切片开始的索引&#xff08;包括该索引处的元素&#xff09;。 stop 是切片结束的索引&#xff08;不包括该索引处的元素&#xff09;。 step 是切片的步长&#xff0…

【S32K3 入门系列】- ADC 模块简介(上)

一、 前言 对于 S32K3 系列的初学者来说&#xff0c;S32K3 系列的参考手册阅读难度是让人望而却步的&#xff0c;本系列将对 S32K3 系列的外设进行逐一介绍&#xff0c;对参考手册一些要点进行解析。本文旨在介绍 S32K3 系列的 ADC 模块&#xff0c; ADC&#xff08;Analog to…

FreeLearning PHP 译文集翻译完成

使用 PHP 和 jQuery 构建游戏化 Web 站点使用 PHP7 构建 REST Web 服务PHP 入门指南CouchDB 和 PHP Web 开发初学者指南Vue2 和 Laravel5 全栈开发函数式 PHPAngular6 和 Laravel5 Web 全栈开发实用指南FuelPHP 高效开发学习手册PHP 数据对象学习手册PHP7 高性能开发学习手册La…

Mysql:ON DUPLICATE KEY UPDATE

使用 INSERT 语句尝试插入一个已经存在的唯一键或主键时&#xff0c;MySQL 会抛出一个错误。但如果你使用了 ON DUPLICATE KEY UPDATE&#xff0c;MySQL 就会执行更新操作&#xff0c;而不是插入新的记录。 这种语法只在存在重复的唯一键或主键时触发更新操作。如果没有发现重复…

八皇后问题(:java实现

开始搞算法&#xff01; 文章目录 一、问题描述二、最简单的思路三、Java实现四、总结反思 一、问题描述 八皇后问题是一个古老而著名的问题&#xff0c;由国际象棋棋手马克斯贝瑟尔于1848年提出&#xff0c;它是回溯算法的典型案例。问题要求在88的国际象棋上摆放8个皇后&…

Stable Diffusion 模型分享:ChilloutMix(真实、亚洲面孔)chilloutmix_NiPrunedFp32Fix

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 相信近来吸引大家想一试 Stable Diffusion 图像生…

嵌入式面试-回答I2C

说明&#xff1a; 此文章是在阅读了一些列面试相关资料之后对于一些常见问题的整理&#xff0c;主要针对的是嵌入式软件面试中涉及到的问答&#xff0c;努力精准的抓住重点进行描述。若有不足非常欢迎指出&#xff0c;感谢&#xff01;在总结过程中有些答案没标记参考来源&…