844. Backspace String Compare

题目的意思大概是有两个字符串,其中的#表示退格键,让比较最后两个字符串是否相当。

很容易想到的思路就是用一个栈进行模拟这个过程,特别需要注意如果一个串是空串也是可以退格的。

但是很容易想到的另一个特性就是,前面的字符有可能被后面的退格符删去,但是如果如果从后往前进行遍历的话那么一个字符一旦保留就不会被删除,我们比较两个字符串保留下来的字符,一旦发现不相等就直接返回。

总体来讲就是双指针加逆序遍历。

其实看到这个题我直接就想到双指针加逆序遍历了。但是昨天晚上也不知道是因为困了还是什么原因,写了二十分钟写的都是错的。关键是对删除的过程理解的不够深刻,我们得到的保留的下来的字符应该有两个特征:

  1. 不是#
  2. 后面没有#来删除它
    抓住这两个特征,如果有一个特征不满足就要继续删除,直到删除过程结束。
    中午写了一下直接过了,果然还是白天头脑清晰一点。
class Solution {
public:bool backspaceCompare(string S, string T) {int i = S.size()-1; int j = T.size()-1;int iNum = 0, jNum = 0;while(i>=0 || j>=0){while(i>=0 && (S[i]=='#' || iNum > 0)){if(S[i] == '#') ++iNum;else --iNum;--i;}while(j>=0 && (T[j]=='#' || jNum > 0)){if(T[j] == '#') ++jNum;else --jNum;--j;}if(i<0 && j<0) return true;if(i<0 && j>=0 || i>=0 && j<0) return false;if(S[i] != T[j]) return false;--i; --j;}return true;}
};

看了一下题解,大概和题解写的差不多,但是我在上面循环删除部分写的比题解稍微好一点,题解在最后的判断写的比我好。

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

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

相关文章

链表三连击

876&#xff1a;链表的中间节点 206&#xff1a;反转链表 143&#xff1a;重排练表 链表的中间节点 这个题一看就是最简单的快慢指针&#xff0c;但是在具体实现的时候我还是犹豫思考了一下&#xff1a;要不要在链表前面放置哑节点&#xff0c;快指针应该什么时候判断已经到达…

D3力导引图

学习力导引图的时候在网上没有找到什么好的教程&#xff0c;支离破碎地进行了一段时间的学习&#xff0c;还阅读了d3的关于d3的官方文档&#xff0c;但是始终觉得不的要领。这里记录一下我学习力导引图的一些心得以及推荐一下学习资源。 学习资源 官方文档&#xff1a;https:…

Ubuntu Pycharm启动后卡住无法操作

昨天还好好的&#xff0c;今天打开Pycham突然卡住了&#xff0c;卡在了那个preparing workspace的地方&#xff0c;然后在网上搜索了很多方法都没用。直到在网上看到有个大佬说是因为搜狗输入法的问题&#xff0c;我才突然记起来昨天安装了搜狗输入法。。。 kill掉卡住的Pycha…

327 区间和的个数

题目描述 Given an integer array nums, return the number of range sums that lie in [lower, upper] inclusive. Range sum S(i, j) is defined as the sum of the elements in nums between indices i and j (i ≤ j), inclusive. Note: A naive algorithm of O(n2) is t…

浏览器访问本地文件

之前一直苦恼无法在浏览器访问本地文件&#xff0c;尤其是写的网页需要调用外部数据的时候&#xff0c;今天学习到可以用python很方便的解决问题 如果有python3环境&#xff0c;直接在对应的文件夹下运行&#xff08;这里是Ubuntu环境&#xff0c;如果是Windows应该在命令行也…

Ubuntu使用jupyter notebook +导出PDF

因为最近需要做数据分析的工作&#xff0c;所以复习了一下numpy和pandas&#xff0c;并安装了jupyter notebook进行数据分析&#xff0c;这里记录一下环境的设置。 ps:jupyter notebook真香 安装 python3 -m pip install --upgrade pip //升级pip pip3 install jupyter使用 …

SSH:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

给服务器重装了一下系统&#xff0c;结果报了上述错误&#xff1a; WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! ...在网上找…

Ubuntu20.04 更新后黑屏无法加载驱动

本来我的电脑好好的&#xff0c;突然提示说有可应用的更新&#xff0c;我想都没想就直接更新了&#xff0c;可是没想到更新以后经过grub以后就会黑屏&#xff0c;一动不动&#xff0c;在网上搜索了许多&#xff0c;提到的说法是在grub界面对第一个Ubuntu的启动按e进行编辑 在倒…

每日一题:leetcode1489. 找到最小生成树里的关键边和伪关键边

时隔多年我终于又开始写博客了&#xff0c;主要是已经放假了&#xff0c;之前一直忙于考试和课设没有时间写博客&#xff0c;学习笔记也因为买了iPad的缘故大部分都是手写的了。 假期想要把以前做过的项目都整理一下放在github和CSDN上。 也已经很久没有写算法题了&#xff0…

每日一题:leetcode989.数组形式的整数加法

题目描述 题目分析 题目非常简单&#xff0c;但是我还是wa了几发&#xff0c;对不起&#xff0c;我太菜了。我的想法是把K转换为数组然后用大整数加法处理。但是因为太久没有写了导致写了好久。 class Solution { public:void add(vector<int> &A, vector<int&g…

每日一题:leetcode674.最长连续递增序列

题目描述 题目分析 一遍遍历&#xff0c;如果硬要说用了什么算法的话觉得应该算是一个简单的滑动窗口吧 AC代码 class Solution { public:int findLengthOfLCIS(vector<int>& nums) {if (nums.size() 0) {return 0;}int ret 1;int cnt 1;for (int i 1; i <…

每日一题:leetcode959.由斜杠划分区域

题目描述 题目分析 仔细分析这道题以后虽然觉得可能要转化为图之类的&#xff0c;但是完全没有具体的想法&#xff0c;因为每个格子都有三种情况&#xff0c;这三种情况的不同的组合又会产生不同的结果。 发现找不到编码转化为图以后&#xff0c;我分析了一下不同数量方块之间…

每日一题:leetcode1319.联通网络的操作次数

题目描述 题目分析 ps&#xff1a;这篇博客是补前天的&#xff0c;前天在老家不方便写博客 题目挺简单的&#xff0c;但是通过题目对图的连通性有了一个更深刻的认识&#xff1a;如果有超过&#xff08;或等于&#xff09;n-1条边&#xff0c;则一定是可以让整个图联通的。 如…

每日一题:leetcode1128.等价多米诺骨牌对数

题目描述 题目分析 看到题目以后第一个想法是遍历数组&#xff0c;对每个元素有一个数据结构中保存了该元素出现的次数&#xff0c;然后往结果中相加&#xff08;表示该元素和前面的对数&#xff09;&#xff0c;然后再将元素出现的次数加一。 思考用什么数据结构保存元素出现…

每日一题:leetcode1579.保证图可完全遍历

题目描述 题目分析 非常惭愧&#xff0c;感觉自己有点畏难心理&#xff0c;看到是困难题第一个想法是自己想不出来。。。 因为自己认为自己做不出来&#xff0c;所以完全不能进行思考&#xff0c;稍微思考一下就觉得不行不行。 我也想到了分别用两个并查集判断各自可以去掉多少…

每日一题:leetcode724.寻找数组的中心索引

题目描述 题目分析 今天这道题原本很简单&#xff0c;我都没打算写题解&#xff0c;当时用手机看的题目&#xff0c;我想着我三分钟应该能写出来&#xff0c;结果没想到wa了三发。。。 对待简单题不要轻视&#xff0c;对待难题不要畏难。 今天的主要问题是没有看数据范围&…

C++Primer学习笔记:第2章 变量和基本类型

空类型不对应具体的值&#xff0c;仅用于一些特殊的场合 long的长度为32位&#xff0c;float有&#xff17;个有效位&#xff0c;double有16个有效位 如果数值超过了int的范围&#xff0c;应该用long long而不是long&#xff0c;long一般和int一样大 在算术表达式中不要使用…

C++Primer学习笔记:第3章 字符串、向量和数组

可以使用using声明而无需专门的前缀&#xff1a;using namespace::name;.。位于头文件的代码一般来说不应该使用using声明&#xff0c;这是因为头文件的内容会拷贝到所有引用他的文件中去&#xff0c;如果头文件中有某个using声明&#xff0c;那么每个使用了该头文件的文件都会…

C++Primer学习笔记:第4章 表达式

表达式由一个或多个运算对象组成&#xff0c;对表达式求值将得到一个结果。字面值和变量是最简单的表达式&#xff0c;其结果就是字面值和变量的值。把一个运算符和一个或多个运算对象组合起来可以生成较复杂的表达式。 重载运算符包括运算对象的类型和返回值的类型&#xff0…

C++Primer学习笔记:第5章 语句

一个表达式末尾加上分号就变成了表达式语句。最简单的语句是空语句&#xff08;一个单独的分号&#xff09;&#xff1a;语法上需要一条语句但是逻辑上不需要 复合语句是指用花括号括起来的&#xff08;可能为空&#xff09;语句和声明的序列&#xff1a;用在语法上需要一条语…