返回

LeetCode每日一题:2021.3.9 | 刷题打卡

前端

LeetCode每日一题第1047题,让我们来打卡刷题,挑战自我,用代码的力量解决问题。

题目要求:给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

思路分析:

我们可以通过遍历字符串 S,并使用栈来存储结果字符串。当我们遇到一个字符时,我们会将其与栈顶的字符进行比较。如果它们相同,我们就将它们都从栈中弹出。否则,我们就将该字符压入栈中。

实现步骤:

  1. 定义一个栈来存储结果字符串。
  2. 遍历字符串 S。
  3. 当我们遇到一个字符时,将其与栈顶的字符进行比较。
  4. 如果它们相同,我们就将它们都从栈中弹出。
  5. 否则,我们就将该字符压入栈中。
  6. 重复步骤 3 和步骤 4,直到我们遍历完整个字符串 S。
  7. 将栈中剩余的字符连接成一个字符串,并返回该字符串。

示例代码:

def remove_duplicates(s):
  """
  删除字符串中的所有相邻重复项。

  参数:
    s: 给定的字符串。

  返回:
    删除所有相邻重复项后的字符串。
  """

  # 定义一个栈来存储结果字符串。
  stack = []

  # 遍历字符串 S。
  for char in s:
    # 当我们遇到一个字符时,将其与栈顶的字符进行比较。
    if stack and stack[-1] == char:
      # 如果它们相同,我们就将它们都从栈中弹出。
      stack.pop()
    else:
      # 否则,我们就将该字符压入栈中。
      stack.append(char)

  # 重复步骤 3 和步骤 4,直到我们遍历完整个字符串 S。

  # 将栈中剩余的字符连接成一个字符串,并返回该字符串。
  return ''.join(stack)


# 测试用例。
s = 'abbaca'
print(remove_duplicates(s))  # 输出:ca

s = 'azxxzy'
print(remove_duplicates(s))  # 输出:ay

本题的要点在于如何巧妙地运用栈数据结构来解决问题。栈的先进后出的特性非常适合用于解决这种需要对字符串进行操作的问题。

希望这篇刷题心得对您有所帮助,欢迎大家继续关注 LeetCode每日一题,一起挑战自我,共同进步。