j

jaryue

V1

2023/05/18阅读:11主题:默认主题

leetcode 844. 比较含退格的字符串

leetcode 844. 比较含退格的字符串


题目描述

  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"。

提示:

1 <= s.length, t.length <= 200 s 和 t 只含有小写字母以及字符 '#'

进阶:

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

解题思路

法1

栈:模拟
我们使用两个栈来存储结果字符串\

当字符不为#时将字符储存进栈中,当字符为#时删除最后储存的最后

遍历数组,最后得到的结果进行比对,如果相同返回真.否则为假

  • 时间复杂度(O(n))
  • 空间复杂度(O(n))

执行结果

法1

使用两个栈 sStack 和 tStack 分别处理字符串 s 和 t。遍历输入的字符串,遇到字符 '#' 时,将栈顶的元素弹出,否则将字符入栈。最后,比较两个栈中剩余的元素是否相等,如果相等,则返回 true,否则返回 false。

func backspaceCompare(s string, t string) bool {
    sStack := []rune{}
    tStack := []rune{}

    for _, char := range s {
        if char == '#' {
            if len(sStack) > 0 {
                sStack = sStack[:len(sStack)-1]
            }
        } else {
            sStack = append(sStack, char)
        }
    }

    for _, char := range t {
        if char == '#' {
            if len(tStack) > 0 {
                tStack = tStack[:len(tStack)-1]
            }
        } else {
            tStack = append(tStack, char)
        }
    }

    return string(sStack) == string(tStack)
}

执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 0 ms , 在所有 Go 提交中击败了 100.00% 的用户 内存消耗: 1.9 MB , 在所有 Go 提交中击败了 31.43% 的用户 通过测试用例: 114 / 114 炫耀一下:


分类:

后端

标签:

后端

作者介绍

j
jaryue
V1