比较含退格的字符串

本文参考代码随想录

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

思路

python 复制代码
class Solution:
    def get_string(self, s: str):
        result = []
        for c in s:
            if c != "#":
                result.append(c)
            elif len(result) > 0:
                result.pop()
        return result
    def backspaceCompare(self, s: str, t: str) -> bool:
        return self.get_string(s) == self.get_string(t)

双指针

同时从后向前遍历S和T(i初始为S末尾,j初始为T末尾),记录#的数量,模拟消除的操作,如果#用完了,就开始比较S[i]和S[j]。

如果S[i]和S[j]不相同返回false,如果有一个指针(i或者j)先走到的字符串头部位置,也返回false。

python 复制代码
class Solution:
    def backspaceCompare(self, s: str, t: str) -> bool:
        i = len(s) - 1
        j = len(t) - 1
        s_skip = t_skip = 0
        while i >= 0 or j >= 0:
            while i >= 0:
                if s[i] == "#":
                    i -= 1
                    s_skip += 1
                elif s_skip > 0:
                    s_skip -= 1
                    i -= 1
                else:
                    break
            while j >= 0:
                if t[j] == "#":
                    j -= 1
                    t_skip += 1
                elif t_skip > 0:
                    j -= 1
                    t_skip -= 1
                else:
                    break
            if i < 0 or j < 0:
                break
            elif s[i] != t[j]:
                return False
            i -= 1
            j -= 1
        return i == j == -1
            
相关推荐
iAkuya2 小时前
(leetcode)力扣100 27合并两个有序链表(迭代/递归)
算法·leetcode·链表
小鸡吃米…2 小时前
机器学习 - Python 库
人工智能·python·机器学习
xingzhemengyou12 小时前
Python GUI之tkinter-基础控件
开发语言·python
挖矿大亨2 小时前
C++中深拷贝与浅拷贝的原理
开发语言·c++·算法
崇山峻岭之间2 小时前
Matlab学习记录16
开发语言·学习·matlab
在屏幕前出油2 小时前
Python面向对象编程基础——类、实例对象与内存空间
开发语言·python
C++业余爱好者2 小时前
Hibernate 框架超详细说明
java·开发语言
天天进步20152 小时前
如何通过 Py_Initialize 实现 C++ 对 Python 的嵌入调用
python
Niuguangshuo2 小时前
# PyTorch 中 `nn.ModuleList` 详解
人工智能·pytorch·python