《代码随想录》学习笔记,原链接:移除元素相关题目推荐
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
【注】
- 由于字符串不能进行修改,因此需要先将字符串通过list()函数转换成字符列表
- 双指针法中,fast和slow表示的是当前访问位置的下标,而不是元素本身
- 经过演算,遍历后slow的值就是剩余的字符个数
- 由于题目要求对空文本输入退格字符,文本继续为空。即,slow在小于0时依然保持为0,所以需要slow = max(0, slow - 1)
- 对字符列表处理完毕后,使用"".join()将字符列表再次拼装成字符串