给定 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"。
class Solution {
public:
bool backspaceCompare(string s, string t)
{
int jins=0,jint=0;//定义各自#号的初始值
int i=s.size()-1,j=t.size()-1;//从后往前遍历(因为找到#号 需要跳过它前面那个元素)
while(i>=0||j>=0)//只要其中一个不为0 就得一直循环下去
{
while(i>=0)
{
if(s[i]=='#')
{
jins++;//找到# 就加1
i--;//往前推一
}
else if(jins>0)//代表有#号了,需要跳过当前元素
{
jins--;
i--;
}
else
break;//如果是个正常元素 直接退出循环
}
//字符串t也是同理
while(j>=0)
{
if(t[j]=='#')
{
jint++;//找到# 就加1
j--;//往前推一
}
else if(jint>0)//代表有#号了,需要跳过当前元素
{
jint--;
j--;
}
else
break;//如果是个正常元素 直接退出循环
}
if(i>=0&&j>=0)
{
if(s[i]!=t[j]) //从后往前比较 不相等直接返回false
return false;
}
else
{
if(i>=0||j>=0)//其中一个字符串结束循环 另一个还没结束 肯定不相等
//如 a# ab# 前一个i=-1,后者j=0
{
return false;
}
}
i--,j--;//比完当前元素 往前推一
}
return true;
}
};