给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,请你判断二者是否相等。# 代表退格字符。
如果相等,返回 true ;否则,返回 false 。
注意:如果对空文本输入退格字符,文本继续为空。
进阶:尝试用空间复杂度为O(1)的算法解决。
第一种方法为用栈重构字符串,空间复杂度为O(N+M)
第二种方法为双指针法,关键解析写在注释上面,空间复杂度为O(1)
#include<string>
#include<stack>
using namespace std;
class Solution {
public:
bool backspaceCompare_1(string s, string t) {
return (build(s) == build(t));
}
string build(string str) {
// 用栈重构字符串
// 遍历字符串 当遇到 非# 时,进栈。 当遇到 # 时,推出栈顶元素
string ret;
for (char ch : str) {
if (ch != '#') {
ret.push_back(ch);
}
else if (!ret.empty() && ch=='#') {
ret.pop_back();
}
}
return ret;
}
};
class Solution_1 {
public:
bool backspaceCompare(string s, string t) {
// 一个字符是否要被删除,取决于它后面的退格符,而与其前面的退格符无关。
// 定义一个skip,表示当前要