删除字符串中的所有相邻重复项

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

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

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

思路

最初的想法是遍历一次进行一次删除操作,再进行二次遍历。

这里我们可以借助栈来操作,一次遍历即可。
遍历字符串,判断与栈顶元素是否相同,不同则入栈,相同则出栈,最后翻转输出栈。

代码

public string RemoveDuplicates(string S)
{
Stack<char> stack = new Stack<char>();

foreach(var x in S)
{
if(stack.Count>0 && x==stack.Peek())
stack.Pop();
else
stack.Push(x);
}
var rs = stack.Reverse();
return new string(rs.ToArray());
}