844. Backspace String Compare

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. 1 <= S.length <= 200

  2. 1 <= T.length <= 200

  3. S and T only contain lowercase letters and '#' characters.

Follow up:

  • Can you solve it in O(N) time and O(1) space?

string helper(const string& str) {
    string res;
    for (char c : str) {
        if (c == '#') {
            if (!res.empty()) res.pop_back();
        } else res.push_back(c);
    }
    return res;
}
bool backspaceCompare(string S, string T) { // time: O(m + n); space: O(m + n)
    return helper(S) == helper(T);
}
// Constant Space Usage
bool backspaceCompare(string S, string T) { // time: O(m + n); space: O(1)
    int i = S.length() - 1, j = T.length() - 1, cnt1 = 0, cnt2 = 0;
    while (i >= 0 || j >= 0) {
        while (i >= 0 && (S[i] == '#' || cnt1 > 0) ) S[i--] == '#' ? ++cnt1 : --cnt1;
        while (j >= 0 && (T[j] == '#' || cnt2 > 0) ) T[j--] == '#' ? ++cnt2 : --cnt2;
        if (i < 0 || j < 0) break;
        if (S[i--] != T[j--]) return false;
    }
    return i == j;
}

Last updated

Was this helpful?