美文网首页
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