抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 S 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。


思路

  • 用栈存放遍历过的元素,当遍历当前的这个元素的时候,去栈中检查是否遍历过相同数值的相邻元素,再做消除操作。

学习点

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
string removeDuplicates(string s) {
// 用栈
stack<char> uniques;
for (int i = 0; i < s.length(); i++)
{
if ((!uniques.empty() && s[i] != uniques.top()) || uniques.empty())
{
uniques.push(s[i]);
}
else if (!uniques.empty() && s[i] == uniques.top())
{
uniques.pop();
}
}
// stack 中即为最后的结果
string res = "";
while (!uniques.empty())
{
res += uniques.top();
uniques.pop();
}
reverse(res.begin(), res.end());

return res;
}
};