leetcode844. 比较含退格的字符串(栈+双指针)
一:题目
二:思路+代码
1:利用栈
(1):思路
1.利用栈 我们将字符串中的单个元素都入栈 当遇到’#'的时候将将栈顶元素弹出
(2):上码(方法一)
class Solution {public:/**思路:1.利用栈 我们将字符串中的单个元素都入栈 当遇到'#'的时候将将栈顶元素弹出*/bool backspaceCompare(string s, string t) {stack<char> s1,s2;for(char str:s){if(str != '#'){s1.push(str);}else if(!s1.empty()){s1.pop();}}for(char str:t){if(str != '#'){s2.push(str);}else if(!s2.empty()){s2.pop();}}return s1 == s2;}
};
(3):方法二
class Solution {public:/**思路:1.利用栈 我们将字符串中的单个元素都入栈 当遇到'#'的时候将将栈顶元素弹出*/bool backspaceCompare(string s, string t) {return text(s) == text(t);}string text (string str){string s;for(int i = 0; i < str.size(); i++){if(str[i] != '#')s.push_back(str[i]);else if(!s.empty())s.pop_back();}return s;}};
2:双指针
(1):思路
1.我们在遇到’#‘的时候 是删除其前面的元素,而与后面的元素无关,那么我们可以逆序遍历
字符串,当遇到’#‘的时候,指针就往前走,然后当kipNum为0的时候证明我们已经成功移 除一个字符(其实是模拟)
2.这里设置skipNum,tkipNUm两个变量,来记录两个字符串中的’#‘的数量,来模拟消除的过程
那么在这里双指针主要是用在来比较单个字符,就是我们遍历到最后,我们是否可以得到相同
的字符,或者是同时遍历完成,那么也会说明去除’#'前面的字符后的字符串依然相等
(2):上码
class Solution {public:/**思路:1.我们在遇到'#'的时候 是删除其前面的元素,而与后面的元素无关,那么我们可以逆序遍历字符串,当遇到'#'的时候,指针就往前走,然后当kipNum为0的时候证明我们已经成功移 除一个字符(其实是模拟)2.这里设置skipNum,tkipNUm两个变量,来记录两个字符串中的'#'的数量,来模拟消除的过程那么在这里双指针主要是用在来比较单个字符,就是我们遍历到最后,我们是否可以得到相同的字符,或者是同时遍历完成,那么也会说明去除'#'前面的字符后的字符串依然相等*/bool backspaceCompare(string s, string t) {int sKipNum = 0;//记录s中'#'的数量 主要是为了模拟去除'#'前面的字符int tkipNum = 0;//记录t中'#'的数量//双指针int i = s.size() - 1;//逆序int j = t.size() - 1;while(1){//从后往前,消除s中的# while(i >= 0){if(s[i] == '#')//当遇到#的时候这个while循环就有意义了,直到skipnum == 0的时候才跳出这个循环,表示模拟删除了 # 前面的字符sKipNum++;else{if(sKipNum > 0)sKipNum--;elsebreak;}i--;//往前走一个字符}while(j >= 0){if(t[j] == '#')tkipNum++;else{if(tkipNum > 0)tkipNum--;elsebreak; } j--;}//S或者T到头了,那么此时的 i 和 j 为 -1 因为我们是比较单个字符的 if(i < 0 || j < 0)break;//如果两个字符不相等则可以直接返回 trueif(s[i] != t[j])return false; i--;//比如比较的第一个字符相等(逆序)j--;}if(i == -1 && j == -1)return true;elsereturn false;}
};
菜鸡杰又水了一道题 我以为我会双指针了 直到我遇到了这道题 梦醒了 晚安 晚安 加油陌生人!!!
leetcode844. 比较含退格的字符串(栈+双指针)相关推荐
- 【LeetCode844.比较含退格的字符串】——双指针法
目录: 844.比较含退格的字符串 思考: 利用栈: 双指针法: 844.比较含退格的字符串 给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true .# 代 ...
- leetcode844 比较含退格的字符串(python)
文章目录 844. 比较含退格的字符串 分析 代码(重构字符串(通过位置弹出)) 通过截图 代码(重构字符串(不断加入和弹出)) 通过截图 844. 比较含退格的字符串 给定 s 和 t 两个字符串, ...
- leetcode844. 比较含退格的字符串
一:题目 二:上码 class Solution {public:/**思路:1.利用栈 我们将字符串中的单个元素都入栈 当遇到'#'的时候将将栈顶元素弹出*/bool backspaceCompar ...
- 844. 比较含退格的字符串
文章目录 844. 比较含退格的字符串 思路--双指针 844. 比较含退格的字符串 844. 比较含退格的字符串 思路–双指针 准备两个指针 endS, endT 分别指向 S,T 的末位字符,再准 ...
- byte数组转字符串_leetcode刷题844比较含退格的字符串(带代码解析,带知识点回顾)...
844. 比较含退格的字符串 难度:简单 第一:简单浏览一下题目 给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果.# 代表退格字符. 注意:如果对空文 ...
- 减去字符串_leetcode刷题844比较含退格的字符串(带代码解析,带知识点回顾)
844. 比较含退格的字符串 难度:简单 第一:简单浏览一下题目 给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果.# 代表退格字符. 注意:如果对空文 ...
- LeetCode第 844 题:比较含退格的字符串(C++)
844. 比较含退格的字符串 - 力扣(LeetCode) 最终比较的是有效字符串是否相等,所以关键就是如何获取有效字符串. 一开始的思路,类似求字符串的最长子串的思路,利用左右边界的移动,但是写了写 ...
- 每日一道leetcode(python)844. 比较含退格的字符串
每日一道leetcode(python)844. 比较含退格的字符串 2021-09-05 给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果. # 代表 ...
- 844. 比较含退格的字符串(双指针)
844. 比较含退格的字符串 示例 1: 输入:s = "ab#c", t = "ad#c" 输出:true 解释:s 和 t 都会变成 "ac&qu ...
最新文章
- 【FFmpeg】便捷函数汇总(持续更新中...)
- 1,html常用标签学习
- 使用Xcode和Instruments调试解决iOS内存泄露
- 【PTVS+Theano+CPU/GPU】在windows下使用VS安装theano深度学习工具
- 关于 try catch 捕捉不到异常
- L3-029 还原文件 (30 分)-PAT 团体程序设计天梯赛 GPLT
- [NOIP2003普及组]麦森数(快速幂+高精度)
- java关系操作符==和equals()区别
- 转载:三种方式使得iOS应用能够在后台进行数据更新和下载
- OPENG 获取状态的一些枚举值
- centos系统添加桌面图标
- 传奇怎么设置不显示服务器,如何将传奇服务器未知神殿地图修改为不限制进出...
- 2016版excel_excel中yd是什么意思
- Linux学习入门-------------------------VMvare与镜像的安装与配置
- matlab弹簧阻尼系统论文,MATLAB系统仿真报告有阻尼受迫振动系统.doc
- Jersey框架二:Jersey对JSON的支持
- 计算机连接到网络通信介质的物理设备,计算机应用基础.doc
- 在无网络时使用Unity Hub
- 华北、华东、华南大家庭,我在这里等你
- 【SQLAlchemy】第1节:安装与引擎连接
热门文章
- EntityFramework的多种记录日志方式,记录错误并分析执行时间过长原因
- 哪一个不是linux常用的shell,Linux下查看使用的是哪种shell的方法汇总
- 140种Python标准库、第三方库和外部工具都有了
- 【QGIS入门实战精品教程】4.1:QGIS栅格数据地理配准完整操作流程
- Windows Phone 8开发环境搭建介绍
- 一篇文学会商用可编辑问卷表单制作【iVX 十二】
- 电梯里为什么放镜子?90%的人都不知道
- 一生只有43年,喜欢泡妹打架,却凭借一篇文章震惊世界,跻身一流数学家
- 学习爬虫限时只需9.9,还在犹豫什么?
- 一起读懂传说中的经典:受限玻尔兹曼机