比较含退格的字符串

本文参考代码随想录

给定 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末尾),记录#的数量,模拟消除的操作,如果#用完了,就开始比较Si和Sj

如果Si和Sj不相同返回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
            
相关推荐
Mr__Miss5 分钟前
Java 随机数生成器选型指南:Random、ThreadLocalRandom 与 SecureRandom
java·开发语言·python
Risehuxyc6 分钟前
PHP数据类型
开发语言·php
Wang's Blog10 分钟前
Go-Zero基础入门5: 探究go-zero如何基于gRPC扩展客户端
开发语言·后端·golang·go-zero
zh_xuan11 分钟前
c++ span的用法
开发语言·c++·span
caimouse22 分钟前
KiSystemStartupBootStack 函数分析
开发语言·reactos
CTA量化套保23 分钟前
2026年下半年Python量化入门,先看API如何接进小流程
人工智能·python
薛定猫AI28 分钟前
【深度解析】动态多智能体团队:并行规划、开发与验证的 Python 实战
大数据·开发语言·python
meilindehuzi_a9 小时前
从零理解并实现 RAG:用 LangChain.js 构建语义检索问答系统
开发语言·javascript·langchain
风流 少年9 小时前
Julia
开发语言·julia
江畔柳前堤10 小时前
GO01-Go 语言与主流编程语言深度对比
开发语言·人工智能·后端·微服务·云原生·golang·go