比较含退格的字符串

本文参考代码随想录

给定 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
            
相关推荐
zhooyu5 分钟前
C++和OpenGL手搓3D游戏编程(20160207进展和效果)
开发语言·c++·游戏·3d·opengl
HAPPY酷8 分钟前
C++ 和 Python 的“容器”对决:从万金油到核武器
开发语言·c++·python
大鹏说大话9 分钟前
告别 MSBuild 脚本混乱:用 C# 和 Nuke 构建清晰、可维护的现代化构建系统
开发语言·c#
Mr_sun.30 分钟前
Day09——入退管理-入住-2
android·java·开发语言
MAGICIAN...41 分钟前
【java-软件设计原则】
java·开发语言
gpfyyds6661 小时前
Python代码练习
开发语言·python
YuTaoShao1 小时前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法三)DP 空间优化
算法·leetcode·职场和发展
盐真卿1 小时前
python第八部分:高级特性(二)
java·开发语言
茉莉玫瑰花茶1 小时前
C++ 17 详细特性解析(5)
开发语言·c++·算法
lly2024061 小时前
《堆的 shift down》
开发语言