Backspace # affects the string, for eg. ab## becomes "". When we move from left to right in string, say with iterator index i, and if we encounter #, we have to come back.
What if traverse backwards. Whenever we encounter #, we skip some chars, depending on number of # we encountered. Otherwise, we will just compare 2 strings.
publicbooleanbackspaceCompare(String s, String t) {
int i = s.length() - 1, j = t.length() - 1;
int skipS = 0, skipT = 0;
// While there may be chars in build(s) or build (t)while (i >= 0 || j >= 0) {
// Find position of next possible char in build(s)while (i >= 0) {
if (s.charAt(i) =='#') {
skipS++;
i--;
} elseif (skipS > 0) {
skipS--;
i--;
} else {
break;
}
}
// Find position of next possible char in build(t)while (j >= 0) {
if (t.charAt(j) =='#') {
skipT++;
j--;
} elseif (skipT > 0) {
skipT--;
j--;
} else {
break;
}
}
// If two actual characters are differentif (i >= 0 && j >= 0 && s.charAt(i) != t.charAt(j)) {
returnfalse;
}
// If expecting to compare char vs nothingif (((i >= 0) && (j ==-1)) || ((i ==-1) && j >= 0)) {
returnfalse;
}
i--;
j--;
}
returntrue;
}