给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。

    注意:如果对空文本输入退格字符,文本继续为空。

    示例 1:

    输入:S = “ab#c”, T = “ad#c”
    输出:true
    解释:S 和 T 都会变成 “ac”。
    示例 2:

    输入:S = “ab##”, T = “c#d#”
    输出:true
    解释:S 和 T 都会变成 “”。
    示例 3:

    输入:S = “a##c”, T = “#a#c”
    输出:true
    解释:S 和 T 都会变成 “c”。
    示例 4:

    输入:S = “a#c”, T = “b”
    输出:false
    解释:S 会变成 “c”,但 T 仍然是 “b”。

    提示:

    1 <= S.length <= 200
    1 <= T.length <= 200
    S 和 T 只含有小写字母以及字符 ‘#’。

    进阶:

    你可以用 O(N) 的时间复杂度和 O(1) 的空间复杂度解决该问题吗?

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/backspace-string-compare

    思路直接参考:
    https://leetcode-cn.com/problems/backspace-string-compare/solution/bi-jiao-han-tui-ge-de-zi-fu-chuan-by-leetcode-solu/

    1. //栈
    2. var backspaceCompare = function (S, T) {
    3. const getResult = (s) => {
    4. const stack = [];
    5. for (let i = 0; i < s.length; i++) {
    6. if (s[i] === "#") {
    7. if (stack.length > 0) {
    8. stack.pop();
    9. }
    10. } else {
    11. stack.push(s[i]);
    12. }
    13. }
    14. return stack.join("");
    15. };
    16. return getResult(S) === getResult(T);
    17. };
    18. //双指针
    19. var backspaceCompare = function (S, T) {
    20. let i = S.length - 1, j = T.length - 1;
    21. let skipS = 0, skipT = 0;
    22. while (i >= 0 || j >= 0) {
    23. while (i >= 0) {
    24. if (S[i] === "#") {
    25. skipS++;
    26. i--;
    27. } else if (skipS > 0) {
    28. skipS--;
    29. i--;
    30. } else {
    31. break;
    32. }
    33. }
    34. while (j >= 0) {
    35. if (T[j] === "#") {
    36. skipT++;
    37. j--;
    38. } else if (skipT > 0) {
    39. skipT--;
    40. j--;
    41. } else {
    42. break;
    43. }
    44. }
    45. if (i >= 0 && j >= 0) {
    46. if (S[i] !== T[j]) {
    47. return false;
    48. }
    49. } else {
    50. if (i >= 0 || j >= 0) {
    51. return false;
    52. }
    53. }
    54. i--;
    55. j--;
    56. }
    57. return true;
    58. };