844. 比较含退格的字符串

105 阅读1分钟

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。

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

示例 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 = "b"
输出: false
解释: s 会变成 "c",但 t 仍然是 "b"

题解 :

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
//  方法一:双指针
var backspaceCompare = function (s, t) {
    let i = s.length - 1, j = t.length - 1, skipS = 0, skipT = 0;
    while (i >= 0 || j >= 0) {
        // 对s 做循环
        while (i >= 0) {
            // 当遇到 ‘#’ 时 skipS记录
            if (s[i] === '#') {
                skipS++
                i--
            } else if (skipS > 0) { // 当没有遇到 ‘#’ 时 并且skipS大于0 时过滤到掉前数
                skipS--;
                i--
            } else {
                break
            }
        }
        // 对t 做循环
        while (j >= 0) {
            // 当遇到 ‘#’ 时 skipS记录
            if (t[j] === '#') {
                skipT++
                j--
            } else if (skipT > 0) {// 当没有遇到 ‘#’ 时 并且skipS大于0 时过滤到掉前数
                skipT--;
                j--
            } else {
                break
            }
        }
        // 判断如果两个数不相等
        if (s[i] !== t[j]) return false;
        i --
        j --
    }
    return true
};
// 方法二:栈结构
var backspaceCompare = function (s, t) {
    const stackS = [], stackT = []
    // 遍历s 遇到‘#’出栈,没遇到入栈
    for (let ca of s) {
        if (ca === '#') {
            stackS.pop()
        } else {
            stackS.push(ca)
        }
    }
    // 遍历t 遇到‘#’出栈,没遇到入栈
    for (let ca of t) {
        if (ca === '#') {
            stackT.pop()
        } else {
            stackT.push(ca)
        }
    }
    // 对比两条入栈清理‘#’后的数据
    while (stackS.length && stackT.length) {
        if (stackS.pop() !== stackT.pop()) return false
    }
    // 如果出站后都相等,判断长度是否相等
    return stackS.length == stackT.length ? true : false
}

来源:力扣(LeetCode)

链接:leetcode.cn/problems/ba…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。