给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
image.png
解题思路:
- 递归解法,相邻字母相同则返回重新拼接后字符串的function结果;
- 桶遍历,新建26个字母的字典,不断遍历字典,替换S中的重复字母;
- 栈,遍历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)
网友评论