思路:
用栈来解决,在栈不为空的情况下,逐个取出字符然后和栈顶元素进行比较,如果相同则栈执行pop操作,然后取下一个字符串,如果不相等或者栈为空则执行push操作
#include<iostream>
#include<string>
#include<stack>
#include<algorithm>
using namespace std;
class Solution
{
public:
string removeDuplicates(string S)
{
stack<char> cStack;
string result = "";
for(int c=0; c<S.size(); )
{
while(!cStack.empty() && S[c] == cStack.top())
{
cStack.pop();
c++;
}
cStack.push(S[c]);
c++;
}
while(!cStack.empty())
{
result+=cStack.top();
cStack.pop();
}
reverse(result.begin(),result.end());
return result;
}
};
int main()
{
string str = "abbaca";
string result = "";
Solution s;
result = s.removeDuplicates(str);
cout<<result<<endl;
return 0;
}
更进一步:(膜拜大佬一波)
链接在此:https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/comments/98920
还是用栈没错,但是这次用的是栈的思想,而不是直接使用stack
class Solution
{
public:
string removeDuplicates(string S)
{
int top = -1;
for(auto c:S)
{
if(top==-1)
{
S[++top] = c;
}
else
{
if(S[top] == c)
top--;
else
S[++top]=c;
}
}
return {S.begin(),S.begin()+top+1};
}
};