美文网首页
LeetCode-1047-删除字符串中的所有相邻重复项

LeetCode-1047-删除字符串中的所有相邻重复项

作者: 阿凯被注册了 | 来源:发表于2020-10-19 13:48 被阅读0次

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


image.png

解题思路:

  1. 递归解法,相邻字母相同则返回重新拼接后字符串的function结果;
  2. 桶遍历,新建26个字母的字典,不断遍历字典,替换S中的重复字母;
  3. 栈,遍历S,若与栈顶字母相等则弹出,否则将s加入栈。

Python3代码:

class Solution:
    def removeDuplicates(self, S: str) -> str:
        # 解法1:递归
        for i in range(len(S)-1):
            if S[i]==S[i+1]:
                return self.removeDuplicates( S[:i]+S[i+2:])
        return S

        # 解法2:桶遍历
        from string import ascii_lowercase
        duplicates = {2 * ch for ch in ascii_lowercase}
        prev_length = -1
        while prev_length != len(S):
            prev_length = len(S)
            for i in duplicates:
                S = S.replace(i, '')
        return S

        # 解法3:栈
        output = []
        for s in S:
            if output and output[-1]==s:
                output.pop()
            else:
                output.append(s)
        return ''.join(output)

相关文章

网友评论

      本文标题:LeetCode-1047-删除字符串中的所有相邻重复项

      本文链接:https://www.haomeiwen.com/subject/slthmktx.html