# LC 844. Backspace String Compare
### [Problem link](https://leetcode.com/problems/backspace-string-compare/)
###### tags: `leedcode` `easy` `python` `c++` `Stack` `Two Pointer`
Given two strings <code>s</code> and <code>t</code>, return <code>true</code> if they are equal when both are typed into empty text editors. <code>'#'</code> means a backspace character.
Note that after backspacing an empty text, the text will continue empty.
**Example 1:**
```
Input: s = "ab#c", t = "ad#c"
Output: true
Explanation: Both s and t become "ac".
```
**Example 2:**
```
Input: s = "ab##", t = "c#d#"
Output: true
Explanation: Both s and t become "".
```
**Example 3:**
```
Input: s = "a#c", t = "b"
Output: false
Explanation: s becomes "c" while t becomes "b".
```
**Constraints:**
- <code>1 <= s.length, t.length <= 200</code>
- <code>s</code> and <code>t</code> only contain lowercase letters and <code>'#'</code> characters.
**Follow up:** Can you solve it in <code>O(n)</code> time and <code>O(1)</code> space?
## Solution 1 - Stack
#### Python
```python=
class Solution:
def backspaceCompare(self, s: str, t: str) -> bool:
def check(src):
stack = []
for c in src:
if c == '#':
if stack:
stack.pop()
else:
stack.append(c)
return ''.join(stack)
return check(s) == check(t)
```
#### C++
```cpp=
class Solution {
public:
bool backspaceCompare(string s, string t) {
string a;
for (char& c: s) {
if (c == '#') {
if (a.size() > 0) {
a.pop_back();
}
} else {
a += c;
}
}
string b;
for (char& c: t) {
if (c == '#') {
if (b.size() > 0) {
b.pop_back();
}
} else {
b += c;
}
}
return a == b;
}
};
```
## Solution 2 - Two Pointer (Follow up)
#### Python
```python=
class Solution:
def backspaceCompare(self, s: str, t: str) -> bool:
s_idx, t_idx = len(s), len(t)
while s_idx >= 0 and t_idx >= 0:
s_back, t_back = 1, 1
while s_back > 0:
s_idx -= 1
if s_idx >= 0 and s[s_idx] == '#':
s_back += 1
else:
s_back -= 1
while t_back > 0:
t_idx -= 1
if t_idx >= 0 and t[t_idx] == '#':
t_back += 1
else:
t_back -= 1
if s_idx >= 0 and t_idx >= 0 and s[s_idx] != t[t_idx]:
return False
return s_idx < 0 and t_idx < 0
```
#### C++
```cpp=
class Solution {
public:
bool backspaceCompare(string s, string t) {
int p1 = s.size() - 1;
int p2 = t.size() - 1;
int skip1 = 0;
int skip2 = 0;
while (p1 >= 0 || p2 >= 0) {
while (p1 >= 0) {
if (s[p1] == '#') {
skip1++;
p1--;
} else if (skip1 > 0) {
skip1--;
p1--;
} else {
break;
}
}
while (p2 >= 0) {
if (t[p2] == '#') {
skip2++;
p2--;
} else if (skip2 > 0) {
skip2--;
p2--;
} else {
break;
}
}
if (p1 >= 0 && p2 >= 0 && s[p1] != t[p2]) {
return false;
}
if ((p1 >= 0) != (p2 >= 0)) {
return false;
}
p1--;
p2--;
}
return true;
}
};
```
>### Complexity
>m = s.length
>n = t.length
>| | Time Complexity | Space Complexity |
>| ----------- | --------------- | ---------------- |
>| Solution 1 | O(m + n) | O(m + n) |
>| Solution 1 | O(m + n) | O(1) |
## Note
x