链接:http://vjudge.net/problem/viewProblem.action?id=13762
题意:给一串不带空格和标点符号的字符串,其中没有任何连续的相同字母,现在有一个操作,在任意位置插入两个相同字母,执行多次操作后,求原来的字符串是什么。
解法:用 stack 去写。一开始直接用数组写得很复杂不说还一直错,很容易遗漏特殊情况。
#include <iostream>
#include <string>
#include <stack>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
string str;
cin>>str;
stack<char> s;
int len = str.size();
for(int i = 0;i < len;++i)
{
if(!s.empty() && s.top() == str[i])
{
s.pop();
}
else s.push(str[i]);
}
int n = s.size(),i = 0;
char *ans = new char[n+1];
while(!s.empty())
{
ans[i++] = s.top();
s.pop();
}
ans[i] = '\0';
string ss = string(ans);
reverse(ss.begin(),ss.end());
cout<<ss<<endl;
return 0;
}