day11 代码随想录算法训练营 1047. 删除字符串中的所有相邻重复项

题目:1047. 删除字符串中的所有相邻重复项

我的感悟:

  • 做过的题,还是有印象的。
  • 本身也不难,独立写出来了。

理解难点:

代码难点:

  • 最后一步可以直接优化return "".join(stack)

代码示例:

class Solution:
    def removeDuplicates(self, s: str) -> str:
        stack = []
        for i in s:
            if stack and stack[-1] == i:
                stack.pop()
            else:
                stack.append(i)
        res = ""
        for ch in stack:
            res += ch
        return res 

通过截图:

扩展写法:

  • 看到有人用双指针的方式:两个指针原地出发,快指针把值给慢指针。慢指针比较跟上一个是否相等,相等就回退2格
  • # 方法二,使用双指针模拟栈,如果不让用栈可以作为备选方法。
    class Solution:
        def removeDuplicates(self, s: str) -> str:
            res = list(s)
            slow = fast = 0
            length = len(res)
    
            while fast < length:
                # 如果一样直接换,不一样会把后面的填在slow的位置
                res[slow] = res[fast]
                
                # 如果发现和前一个一样,就退一格指针
                if slow > 0 and res[slow] == res[slow - 1]:
                    slow -= 1
                else:
                    slow += 1
                fast += 1
                
            return ''.join(res[0: slow])

资料:

https://programmercarl.com/1047. 删除字符串中的所有相邻重复项.html

posted @ 2024-01-08 13:09  o蹲蹲o  阅读(0)  评论(0编辑  收藏  举报