📜  门| GATE CS 2018 |第 43 题(1)

📅  最后修改于: 2023-12-03 15:28:37.890000             🧑  作者: Mango

题目描述

给定一个由小写字母组成的字符串,将所有重复的字符从字符串中删除,并以相同的顺序返回新的字符串。

输入格式
  • 输入字符串的长度 $n$,$1 \leq n \leq 10^5$。
  • 输入字符串 $s$,$s_i$ 表示字符串中第 $i$ 个字符。
输出格式

输出去重后的字符串。

示例

输入:8 abcdbced

输出:abcdce

解题思路

本题可以通过使用栈来进行求解,具体步骤如下:

  1. 遍历给定字符串中的每一个字符,如果当前字符不在栈中,就将其压入栈中;
  2. 如果当前字符在栈中,就将栈中的字符全部弹出,直到栈顶元素为当前字符;
  3. 将当前字符压入栈中。

在栈的基础操作上,进行一个判断,即可得到去重后的字符串。

参考代码
def remove_duplicates(s: str) -> str:
    stack = []
    for char in s:
        if not stack or char != stack[-1]:
            stack.append(char)
        else:
            while stack and stack[-1] == char:
                stack.pop()
            stack.append(char)
    return ''.join(stack)

时间复杂度:$O(n)$

空间复杂度:$O(n)$