给定 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)
的时间复杂度和O(1)
的空间复杂度解决该问题吗?
为什么想到栈?直接看注释:
class Solution {
public:
bool backspaceCompare(string S, string T) {
//这种进去又出来的,适合用栈。
//出来的是后进去的,更适合用栈了。
stack<char> s;
stack<char> t;
for(int i=0;i<S.size();i++)
{
if(S[i]!='#')
{
s.push(S[i]);
}
else if(!s.empty())
{
s.pop();
}
}
for(int i=0;i<T.size();i++)
{
if(T[i]!='#')
{
t.push(T[i]);
}
else if(!t.empty())
{
t.pop();
}
}
/* while(!s.empty()&&!t.empty())
{
if(s.top()!=t.top()) return false;
cout<<s.top()<<" "<<t.top()<<endl;
s.pop();
t.pop();
}
if(!s.empty()||!t.empty()) return false;
return true;*/
if(s==t) return true;
else return false;
}
};
虽然空间复杂度不满足要求,但是作为栈的应用够了。
tips:这两个字符栈可以直接比较是否相等/栈也有.size()方法。