思路
一个字符是否会被删掉,只取决于该字符后面的退格符,而与该字符前面的退格符无关。因此当我们逆序地遍历字符串,就可以立即确定当前字符是否会被删掉。
定义两个指针,分别指向两字符串的末尾。每次我们让两指针逆序地遍历两字符串,直到两字符串能够各自确定一个字符,然后将这两个字符进行比较。重复这一过程直到找到的两个字符不相等,或遍历完字符串为止
class Solution {
public:
bool backspaceCompare(string s, string t) {
int pS = s.length()-1;//指针指向字符串s末尾
int pT = t.length()-1;//指针指向字符串t末尾
int delS =0;//字符串s删除的字符个数
int delT =0;//字符串t删除的字符个数
while(pS>=0||pT>=0){
while(pS>=0){
if(s[pS]=='#'){
delS++;
pS--;
}else if(delS>0){
delS--;
pS--;
}else{
break;
}
}
while(pT>=0){
if(s[pT]=='#'){
delT++;
pT--;
}else if(delT>0){
delT--;
pT--;
}else{
break;
}
}
if(pS>=0 && pT>=0){
if(s[pS]!=t[pT]) return false;
}else{
if(pS>=0 ||pT>=0) return false;
}
pS--;
pT--;
}
return true;
}
};