C++:AB5 点击消除
题目:
点击消除_牛客题霸_牛客网 (nowcoder.com)
解题思路
- 栈
先将字符串里的字符放入栈里,然后与字符串的下一个字符比较,若相同,栈pop掉栈顶元素,反之,重复步骤。最后栈里的元素就是我们要的最终形态的逆置。(我们将它逆置回来即可)
- 用string模拟栈结构
先判断模拟栈和string对象里字符,若相同,删除,反之,放入模拟栈。
代码实现
- 栈
#include <stack>
#include <string>
#include <iostream>
using namespace std;
int main()
{
stack<char> stc;
string str;
cin >> str;
for (int i = 0; i < str.size();)
{
stc.push(str[i++]);
while (!stc.empty() && i < str.size() && stc.top() == str[i])
{
stc.pop();
i++;
}
}
string s;
while (!stc.empty())
{
s.insert(s.begin(), stc.top());
stc.pop();
}
if (s.empty())
cout << 0;
else
cout << s;
return 0;
}
- 用string模拟栈结构
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
string s, str;
cin >> str;
for(auto e : str)
{
if(s.size() && s.back() == e)
s.pop_back();
else
s += e;
}
if(s.empty())
cout << 0;
else
cout << s;
return 0;
}