力扣 844. 比较含退格的字符串
题目描述:
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,请你判断二者是否相等。# 代表退格字符。
如果相等,返回 true ;否则,返回 false 。
注意:如果对空文本输入退格字符,文本继续为空。
解析:
1.定义两个指针i和j,分别从后往前遍历字符串s和t,定义两个字符串的空格数初始为0。
2.while循环,分为三种情况,
第一种,当指针i遇到空格符时,则空格数加1,i--;
第二种,当指针i遇到字母时,但空格数不为零,则空格数减1,i--;
第三种,当指针i遇到字母时, 空格数也为零,则break跳出循环;
指针j同理
3.当i和j同时指的是字母时,则判断两个字母是否相同,
如果不相同,则返回false,如果相同,则i--、j--,当 i< 0 && j >= 0 或者 i >= 0 && j < 0时(i和j是不能比较的),则返回false,继续往前遍历,如果遍历完字符串都是相同,则返回ture。
Java:
public boolean backspaceCompare(String s, String t) {
int i = s.length() - 1, j = t.length() - 1;
int backspaceS = 0, backspaceT = 0;
while(i >= 0 || j >= 0) {
while(i >= 0) {
if(s.charAt(i) == '#') {
backspaceS++;
i--;
} else if(backspaceS > 0) {
backspaceS--;
i--;
} else {
break;
}
}
while(j >= 0) {
if(t.charAt(j) == '#') {
backspaceT++;
j--;
} else if(backspaceT > 0) {
backspaceT--;
j--;
} else {
break;
}
}
if(i >= 0 && j >= 0) {
if(s.charAt(i) != t.charAt(j)) {
return false;
}
} else {
if((i < 0 && j >= 0) || (i >= 0 && j < 0)) {
return false;
}
}
i--;
j--;
}
return true;
}
JavaScript:
var backspaceCompare = function(s, t) {
let i = s.length - 1, j = t.length - 1;
let backspaceS = 0, backspaceT = 0;
while(i >= 0 || j >= 0) {
while(i >= 0) {
if(s[i] === "#") {
backspaceS++;
i--;
} else if(backspaceS > 0) {
backspaceS--;
i--;
} else {
break;
}
}
while(j >= 0) {
if(t[j] === "#") {
backspaceT++;
j--;
} else if(backspaceT > 0) {
backspaceT--;
j--;
} else {
break;
}
}
if(s[i] !== t[j]) {
return false;
}
if((i < 0 && j >= 0) || (i >= 0 && j < 0)) {
return false;
}
i--;
j--;
}
return true;
};