题目:844. 比较含退格的字符串 - 力扣(LeetCode)
思路:首先要知道这个#的意思是可以将前面一个数清空,(当时 我以为是将前面一串清空。。。看了半天),由于 # 号只会消除左边的一个字符,所以对右边的字符无影响,所以我们选择从后往前遍历 S,T 字符串,以skipS和T去记录,可以清空前面的数,实际上也是在两个数组中移动,用了双指针算法
图示:
代码:
class Solution {
public:
bool backspaceCompare(string S, string T) {
int i = S.length()-1,j = T.length()-1;
int skipS = 0,skipT = 0;
while(i >= 0 || j >= 0)
{
while(i >= 0)
{
if(S[i] == '#')
skipS++,i--;
else if(skipS > 0)
skipS--,i--;
else break;
}
while(j >= 0)
{
if(T[j] == '#')
skipT++,j--;
else if(skipT > 0)
skipT--,j--;
else break;
}
if( i>=0 && j>=0 ){
if(S[i]!=T[j])
return false;
}
else
{
if(i>=0 || j>=0)
return false;
}
i--,j--;
}
return true;
}
};