比较含退格的字符串
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/backspace-string-compare
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
点击查看代码
class Solution {
public boolean backspaceCompare(String s, String t) {
//定义指向 s ,t 的尾指针
int i = s.length() - 1, j = t.length() - 1;
//定义 s ,t 中的 # 数量
int skipS = 0, skipT = 0;
//迭代,当 s 和 t 都遍历结束退出
while (i >= 0 || j >= 0) {
//遍历 s
while (i >= 0) {
//判断当前索引处值是不是 '#'
if (s.charAt(i) == '#') {
//是则 # 数量加一,指针指向的索引向前移动
skipS++;
i--;
}
//不是 '#' 且当前 '#' 数量不为 0
else if (skipS > 0) {
//将当前 '#' 数量减一
skipS--;
//索引向前移动
i--;
}
//当前不为 '#' 且数量为 0 直接返回
else {
break;
}
}
//遍历 t
while (j >= 0) {
if (t.charAt(j) == '#') {
skipT++;
j--;
} else if (skipT > 0) {
skipT--;
j--;
} else {
break;
}
}
//判断是否超出界限
if (i >= 0 && j >= 0) {
//判断当前索引的值是否相等
if (s.charAt(i) != t.charAt(j)) {
//不相等直接返回 false
return false;
}
}
//超出了界限
else {
//判断是否
if (i >= 0 || j >= 0) {
return false;
}
}
//指针都向前移动
i--;
j--;
}
//返回结果
return 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 只含有小写字母以及字符 '#'