这道题是一道简单题,一遍代码过
思路:字符串s,遍历每一个字符放进一个stack中,比较当前字符和stack中头部元素是否一样,如果一样,则弹出来,有点儿像回文一样,最后剩下的就是不是对称重复的项了。大家可以想一下,ab进栈,然后b进栈发现栈顶相同,弹;a进栈,发现栈顶相同,弹;c进栈,a进栈。
实现步骤:
① 定义一个sta栈
② 遍历每一个字符c
③ 将c比较栈顶元素,如果相同,则弹栈;如果不相同,c进栈
④ 将sta栈的内容返回到另一个栈中sta_tmp
⑤ 弹栈sta_tmp,push_back到string s_rst中
#include <string>
#include <stack>
using std::string;
using std::stack;
class Solution
{
public:
string removeDuplicates(string s)
{
stack<char> sta;
for(size_t i = 0;i < s.size();++ i)
{
if(sta.size() == 0)
{
sta.push(s[i]);
continue;
}
if(s[i] == sta.top())
{
sta.pop();
}
else
{
sta.push(s[i]);
}
}
stack<char> sta_tmp;
while(sta.size() != 0)
{
sta_tmp.push(sta.top());
sta.pop();
}
string s_rst;
while(!sta_tmp.empty())
{
s_rst.push_back(sta_tmp.top());
sta_tmp.pop();
}
return s_rst;
}
};