Let's trace s = "ab##" and t = "c#d#".
Start at the end of both. In s, index is '#', so skip = 1. Index is '#', so skip = 2. Index is 'b', skip it (skip = 1). Index is 'a', skip it (skip = 0). s is empty.
In t, index is '#', skip = 1. Index is 'd', skip it. Index is '#', skip = 1. Index is 'c', skip it. t is empty.
Both empty, so return true.
You visit each character at most once. That's time where and are the string lengths. You only use a couple of pointers and counters, so space.