844.比较含退格的字符串(双指针)

《代码随想录》学习笔记,原链接:移除元素相关题目推荐

class Solution:
    def string(self, s:str) -> str:
        s_list = list(s)      # 将字符串转换成字符列表
        slow = 0        # 构建双指针

        for fast in range(len(s_list)):
            if s_list[fast] != '#':     # 当前不为退格,注意这里fast表示的是下标
                s_list[slow] = s_list[fast]
                slow += 1       # slow往后退一位     
            else:       # 当前为退格
                slow = max(0, slow - 1)     # slow往前退一格,但保证最小值为0
        
        s = "".join(s_list[: slow])     # 经过演算,遍历后slow的值就是剩余的字符个数,将其拼接成字符串返回

        return s

    def backspaceCompare(self, s: str, t: str) -> bool:
        result_s = self.string(s)       # 处理字符串s
        result_t = self.string(t)       # 处理字符串t

        if result_s == result_t:        # 判断处理后的字符串是否相同
            return True
        
        return False

【注】

  1. 由于字符串不能进行修改,因此需要先将字符串通过list()函数转换成字符列表
  2. 双指针法中,fast和slow表示的是当前访问位置的下标,而不是元素本身
  3. 经过演算,遍历后slow的值就是剩余的字符个数
  4. 由于题目要求对空文本输入退格字符,文本继续为空。即,slow在小于0时依然保持为0,所以需要slow = max(0, slow - 1) 
  5. 对字符列表处理完毕后,使用"".join()将字符列表再次拼装成字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值