思路
为什么联想到使用栈这种数据结构来解决?
因为每次操作之后剔除掉相同的元素之后,后面挨着的元素可能依旧是一样的,所以不如把最后的结果存储到一个栈中,这个为了方便,最字符串尾部执行剔除和添加,来模拟栈的结构
解题方法
遍历字符串,如果为空的话直接拼接到字符串的最后,如果和字符串的最后一个元素不相等的话也是拼接到最后
复杂度
时间复杂度:
O
(
n
)
O(n)
O(n)
空间复杂度:
O
(
n
)
O(n)
O(n)
Code
class Solution {
public:
// 这道题的关键在于理解到使用栈的思想来解题,遍历字符串,如果为空吗,或者和字符串的最后一个元素不一样,则添加到字符串中
// 否则就是移除字符串的最后一个元素
string removeDuplicates(string s) {
string res;
for(char ch:s){
if(res.size()==0 || ch!=res.back()) res+=ch;
else res.erase(res.size()-1);
}
return res;
}
};