题目描述
给定 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”。
提示:
1 <= S.length <= 200
1 <= T.length <= 200
S 和 T 只含有小写字母以及字符 '#'。
先给个空间复杂度O(n)的吧
算法1
(维护两个栈)
if(S[i] == ‘#’ && stS.empty())continue;
if(S[i] != ‘#’)stS.push(S[i]);
else stS.pop();
时间复杂度 O(n + m)空间O(m+n)
C++ 代码
class Solution {
public:
stack<char> stS,stT;
bool backspaceCompare(string S, string T) {
for(int i = 0 ; i < S.size();i++)
{
if(S[i] == '#' && stS.empty())continue;
if(S[i] != '#')stS.push(S[i]);
else stS.pop();
}
for(int i = 0 ; i < T.size();i++)
{
if(T[i] == '#' && stT.empty())continue;
if(T[i] != '#')stT.push(T[i]);
else stT.pop();
}
S = "",T = "";
while(!stS.empty())
{
S += stS.top();
stS.pop();
}
while(!stT.empty())
{
T += stT.top();
stT.pop();
}
return S == T;
}
};