day11 代码随想录算法训练营 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