844 比较含退格的字符串

题目 844 比较含退格的字符串

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

思路

直接想到了用栈的结构解决,遇到#就弹出元素。
但是要注意的是如果栈为空怎么弹出元素,所以要把所有情况都考虑清楚

  • 栈不空,元素为#(弹出元素)
  • 栈空,元素为# (直接continue循环)
  • 栈不空,元素不为# (append添加)
  • 栈空,元素不为# (append添加)
    后两种情况合并

代码

class Solution:
    def backspaceCompare(self, s: str, t: str) -> bool:
        stack1 = []
        stack2 = []
        for i in s:
            if stack1 != [] and i == "#":
                stack1.pop()
            elif stack1 == [] and i == "#":
                continue
            else:
                stack1.append(i)
        for i in t:
            if stack2 != [] and i == "#":
                stack2.pop()
            elif stack2 == [] and i == "#":
                continue
            else:
                stack2.append(i)
        return stack1 == stack2

优化后的代码

class Solution:
    def get_res(self, str):
        stack = []
        for i in str:
            if stack != [] and i == "#":
                stack.pop()
            elif stack == [] and i == "#":
                continue
            else:
                stack.append(i)
        return stack

    def backspaceCompare(self, s: str, t: str) -> bool:
        return self.get_res(s) == self.get_res(t)
posted @ 2022-12-28 23:54  时光如你般美好  阅读(19)  评论(0编辑  收藏  举报