目录
力扣844. 比较含退格的字符串
解析代码
力扣844. 比较含退格的字符串
844. 比较含退格的字符串
难度 简单
给定 s
和 t
两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true
。#
代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
示例 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"。
提示:
1 <= s.length, t.length <= 200
s
和t
只含有小写字母以及字符'#'
进阶:
- 你可以用
O(n)
的时间复杂度和O(1)
的空间复杂度解决该问题吗?
class Solution {
public:
bool backspaceCompare(string s, string t) {
}
};
解析代码
和力扣1047. 删除字符串中的所有相邻重复项类似,由于退格的时候需要知道前面元素的信息,而且退格也符合后进先出的特性。因此我们可以使用栈结构来模拟退格的过程。
- 当遇到非 # 字符的时候,直接进栈。
- 当遇到 # 的时候,栈顶元素出栈。
为了方便统计结果,用字符数组string来模拟实现栈结构。
class Solution {
public:
bool backspaceCompare(string s, string t) {
string stack1 = "", stack2 = "";
for(auto& e : s)
{
if(e != '#')
stack1 += e;
else if(stack1.size())
stack1.pop_back();
}
for(auto& e : t)
{
if(e != '#')
stack2 += e;
else if(stack2.size())
stack2.pop_back();
}
return stack1 == stack2;
}
};