Given two strings S and T, return if they are equal when both are typed into empty text editors. # means a backspace character.

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 = "#a#c"
Output: true
Explanation: Both S and T become "c".

Example 4:

Input: S = "a#c", T = "b"
Output: false
Explanation: S becomes "c" while T becomes "b".Note:1 <= S.length <= 2001 <= T.length <= 200S and T only contain lowercase letters and '#' characters.

Follow up:Can you solve it in O(N) time and O(1) space?

Solution:

func backspaceCompare(S string, T string) bool {
    lenS, lenT:= len(S), len(T)
    s, t := lenS - 1, lenT -1;
    delS, delT := 0, 0;
    
    for s >= 0 || t >= 0 {
        for s >= 0 {
            if S[s] == '#' {
                s--
                delS++
            } else if delS > 0 {
                delS--;
                s--
            } else {
                break;
            }
        }
        
        for t >= 0 {
            if T[t] == '#' {
                t--
                delT++
            } else if delT > 0 {
                delT--;
                t--
            } else {
                break;
            }
        }
        //((s >= 0) != (t >= 0)) important
        
        if (s >= 0 && t >= 0 && S[s] != T[t]) || ((s >= 0) != (t >= 0))  {
            return false
        }
        s--;
        t--;
    }

    
    return  true
}