题目:给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空
示例 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 = “#a#c”
输出:true
解释:S 和 T 都会变成 “c”。
示例 4:
输入:S = “a#c”, T = “b”
输出:false
解释:S 会变成 “c”,但 T 仍然是 “b”。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/backspace-string-compare
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public boolean backspaceCompare(String s, String t) {
int S_Len = s.length(), T_Len = t.length();
char[] S_arr = s.toCharArray(), T_arr = t.toCharArray();
int skipS = 0, skipT = 0;
for (int i = S_Len - 1, j = T_Len - 1; i >= 0 || j >= 0; i--, j--) {
while (i >= 0) {
if (S_arr[i] == '#') {
skipS++;
i--;
} else if (skipS > 0) {
// 遇到字符, 但由于需要回退, 所以还需要前移1位
skipS--;
i--;
} else {
// 遇到字符, 且不能回退了, 所以需要比对这个字符是否与T对应位置上的字符相等
break;
}
}
while (j >= 0) {
if (T_arr[j] == '#') {
skipT++;
j--;
} else if (skipT > 0) {
skipT--;
j--;
} else {
break;
}
}
if (i >= 0 && j >= 0) {
if (S_arr[i] != T_arr[j]) return false;
} else if (i >= 0 || j >= 0) {
// 有其中一方已经遍历完整个字符串, 但另外一方没有遍历完整个字符串, 直接返回false
return false;
}
}
return true;
}
}