这种匹配(消除)问题也是栈的擅长所在! 844.比较含退格的字符串 给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。# 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。 示例 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 = #a#c 输出:true 解释:s 和 t 都会变成 “c”。 示例 4:
输入:s = a#c, t = b 输出:false 解释:s 会变成 “c”,但 t 仍然是 “b”。 思路 本文将给出 空间复杂度o(n)的栈模拟方法 以及空间复杂度是o(1)的双指针方法。
普通方法(使用栈的思路) 这道题目一看就是要使用栈的节奏,这种匹配(消除)问题也是栈的擅长所在,跟着一起刷题的同学应该知道,在栈与队列:匹配问题都是栈的强项,我就已经提过了一次使用栈来做类似的事情了。
那么本题,确实可以使用栈的思路,但是没有必要使用栈,因为最后比较的时候还要比较栈里的元素,有点麻烦。
这里直接使用字符串string,来作为栈,末尾添加和弹出,string都有相应的接口,最后比较的时候,只要比较两个字符串就可以了,比比较栈里的元素方便一些。
代码如下:
class solution {public: bool backspacecompare(string s, string t) { string s; // 当栈来用 string t; // 当栈来用 for (int i = 0; i < s.size(); i++) { if (s[i] != '#') s += s[i]; else if (!s.empty()) { s.pop_back(); } for (int i = 0; i < t.size(); i++) { if (t[i] != '#') t += t[i]; else if (!t.empty()) { t.pop_back(); } } if (s == t) return true; // 直接比较两个字符串是否相等,比用栈来比较方便多了 return false; }}; 时间复杂度:o(n + m), n为s的长度,m为t的长度 ,也可以理解是o(n)的时间复杂度 空间复杂度:o(n + m) 当然以上代码,大家可以发现有重复的逻辑处理s,处理t,可以把这块公共逻辑抽离出来,代码精简如下:
安规电容会短路吗?安规电容可以分为哪几种?
OLED技术原理解读及应用展望
2023年机器人产业变革 人形机器人市场未来可期
送给妈妈最好的礼物!蒸汽拖把什么牌子好?
华为MateBook 12英寸二合一平板电脑详解
空间复杂度O(n)的栈模拟方法
用DOE烤出更好的饼干
高通和荣耀达成芯片供应合作?
iphone8什么时候上市?iphone8最新消息:iphone8尚未发布,华强北大量出现山寨版iPhone8
5389万!浙江发布千万级智慧路灯招标项目!
简化SoC开发,直击芯片设计那些痛点!
动力电池安全问题或将在未来几年内解决
通过对驱动层硬件插拔的研究实现USB安全的设计
三大交易平台被查,比特币单日狂泻 15%
微信bug后企业微信又崩溃 腾讯致歉:已经修复
东京论坛2018活动:富士通展示了深度学习芯片DLU和加速卡
AI手机背后也暗藏“危与“机”AI的出现能否改变手机供应链?
索尼PS5开发机专利曝光, V字形设计助其快速散热
双金属温度计注重测量范围应用误区
智能家居时代离我们还有多远的距离