844.比较含退格的字符串——学习笔记
题目:给定 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"。
提示:
- 1 <= s.length, t.length <= 200
- s 和 t 只含有小写字母以及字符 '#'
题目来源:力扣(LeetCode)链接
题解:
class Solution {
public boolean backspaceCompare(String s, String t) {
//定义两个指针指向字符串的最后一个元素
int sIndex = s.length() - 1;
int tIndex = t.length() - 1;
int sSkip = 0; //用来存放s字符串中的‘#’的个数
int tSkip = 0; //用来存放t字符串中的‘#’的个数
while (sIndex >= 0 || tIndex >=0) {
//从字符串的最后往前遍历,直到找到一个有效字符
while (sIndex >= 0) {
//如果找到‘#’,就把‘#’号存起来继续往前遍历
if (s.charAt(sIndex) == '#') {
sSkip++;
sIndex--;
//找到一个字符后判断其要不要退格(和‘#’抵消)
} else if (sSkip > 0) {
sSkip--;
sIndex--;
} else {
//说明此时的字符是有效字符,跳出while循环
break;
}
}
//和上面的工作一样,找到t中的有效字符
while (tIndex >= 0) {
if (t.charAt(tIndex) == '#') {
tSkip++;
tIndex--;
} else if (tSkip > 0) {
tSkip--;
tIndex--;
} else {
break;
}
}
//找到有效字符后,判断sIndex和tIndex是否都大于0
if (sIndex >= 0 && tIndex >= 0) {
//如果都大于0,判断两者的有效字符是否相等,如果不等直接返回false
if (s.charAt(sIndex) != t.charAt(tIndex)) {
return false;
}
} else {
//如果sIndex和tIndex只有一个小于0,说明s和t不相等,直接返回false
if (sIndex >= 0 || tIndex >= 0) {
return false;
}
}
//比较完本次的有效字符,索引后移,继续查找下一个有效字符
sIndex--;
tIndex--;
}
//如果上面的操作没有返回任何值,说明s和t的内容相等,返回true
return true;
}
}

浙公网安备 33010602011771号