1、描述
844给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
示例 1:
输入:S = “ab#c”, T = “ad#c”
输出:true
解释:S 和 T 都会变成 “ac”。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/backspace-string-compare
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2、关键字
退格,相等
3、思路
栈
4、notes
用两个栈一起使用
5、复杂度
时间:O(N+M)两个string的字符的个数
空间:O(N+M)
6、code
class Solution {
public:
bool backspaceCompare(string S, string T) {
if(S.size()==0||T.size()==0) return true; // 特判
bool flag=true; // 答案
stack<char>sta1;
stack<char>sta2;
int num1=0,num2=0; //统计个数
for(auto s:S) // 遍历一个串,构造第一个栈 初始化两个栈
{
if(s!='#') // 压栈
{
sta1.push(s);
num1++; // 栈个数加一
}
else
{
if(!sta1.empty()) // 遇到退格键,如果栈非空,就pop()一个
{
sta1.pop();
num1--;
}
else
;
}
}
for(auto t:T)
{
if(t!='#')
{
sta2.push(t);
num2++;
}
else
{
if(!sta2.empty())
{
sta2.pop();
num2--;
}
else
;
}
}
if(num1!=num2) return false; //解答案:个数不等直接返回false
while(num1--) // 个数相等
{
if(sta1.top()==sta2.top()) //栈顶相等
{
sta1.pop();
sta2.pop();
}
else
{
flag=false;
break;
}
}
return flag;
}
};