给定 s
和 t
两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true
。#
代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
思考利用双指针解决这类问题:
利用指针i和指针j分别遍历字符串s和字符串t。
bool backspaceCompare(string s, string t) {
int i = s.size() - 1; //双指针,从后往前遍历
int j = t.size() - 1;
int flags = 0, flagt = 0; //标识,用来标识遇见的#字符
while (i >= 0 || j >= 0) { //大循环,只要i或j还没遍历完就继续遍历
while (i >= 0) {
//如果遇到#,标识自增,指针往前走
if (s[i] == '#') {
flags++, i--;
}
//如果遇到非#,先判断标识是否不为0
//如果标识不为0,消字符;标识为0,跳出这层循环。可以和t字符进行比较
else if (flags != 0) {
flags--, i--;
} else {
break; //
}
}
while (j >= 0) {
if (t[j] == '#') {
flagt++, j--;
} else if (flagt != 0) {
flags--, 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;
}