LeetCode刷题之1047. 删除字符串中的所有相邻重复项
我不知道将去向何方,但我已在路上! |
---|
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! |
- 题目:
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 - 示例:
示例 1 :
输入:"abbaca"
输出:"ca"
解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
- 提示:
1 <= S.length <= 20000
S 仅由小写英文字母组成。
- 代码1:
class Solution:
def removeDuplicates(self, S: str) -> str:
a = []
for i in range(len(S)):
if a == [] or a[-1] != S[i]:
a.append(S[i])
continue
elif a[-1] == S[i]:
a.pop()
continue
return(''.join(a))
- 算法说明:
建立一个空栈a
,存储S
中的元素,如果S
中当前元素和a
的栈顶的元素相等,删除栈顶元素a[-1]
;如果S
的当前元素和a
的栈顶元素不相等或者a
为空时,将S
的当前元素添加到a
中,直到遍历完S
中所有的元素,将a
中的元素用字符串格式输出!