844.Backspace-String-Compare

844. Backspace String Compare

题目地址

https://leetcode.com/problems/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.

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 = "#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 <= 200
1 <= T.length <= 200
S and T only contain lowercase letters and '#' characters.

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

代码

Approach #1 Build String

Time: O(M + N) && Space: O(M + N)

class Solution {
  public boolean backspaceCompare(String S, String T) {
        return build(S).equals(build(T));
  }

  private String build(String S) {
    Stack<Character> ans = new Stack();
    for (char c: S.toCharArray()) {
      if (c != '#') {
        ans.push(c);
      } else if (!ans.empty()){
        ans.pop();
      }
    }
    return String.valueOf(ans);
  }
}

Approach #2 Two Pointer

public boolean backspaceCompare(String S, String T) {
  int i = S.length() - 1;
  int j = T.length() - 1;
  int back;
  while (true) {
      back = 0;
      while (i >= 0 && (back > 0 || S.charAt(i) == '#')) {
          back += S.charAt(i) == '#' ? 1 : -1;
          i--;
      }
      back = 0;
      while (j >= 0 && (back > 0 || T.charAt(j) == '#')) {
          back += T.charAt(j) == '#' ? 1 : -1;
          j--;
      }
      if (i >= 0 && j >= 0 && S.charAt(i) == T.charAt(j)) {
          i--;
          j--;
      } else {
          break;
      }
  }
  return i == -1 && j == -1;
}

Last updated