1047. 删除字符串中的所有相邻重复项
原题链接:1047. 删除字符串中的所有相邻重复项
思路:
只需要删除相邻又相同的字符就行了
那么只需要运用一个栈来存储当前需要进行匹配的元素
遍历字符串的字符
字符和栈顶的元素不相等时,就代表不是相邻且相同的 需要删除字符
那么将这个字符压入栈中进行存储
如果当前遍历的字符和栈顶元素相等时,就代表是相邻且相同的 需要删除字符
那么将这个栈顶弹出,就代表删除了相邻的的字符重复项
全代码:
class Solution {
public:
string removeDuplicates(string s) {
stack<char> stack_op;
for(int i = 0; i < s.size(); i++)
{//遍历字符串
if(stack_op.empty() || stack_op.top() != s[i])
{//如果栈为空,或者栈顶元素不等于s[i],则代表不是重复匹配项。将s[i]压入栈
stack_op.push(s[i]);
}
else
{//栈不为空的情况下,栈顶元素 == s[i],代表为需要删除的重复项,此时栈顶弹出
stack_op.pop();
}
}
s = "";//重置字符串
while(!stack_op.empty())
{//将栈中的元素逐个压入字符串内,但是要注意,压入后字符串和正确答案互为倒序
s += stack_op.top();
stack_op.pop();
}
//反转下字符串,则为正确答案
reverse(s.begin(),s.end());
return s;
}
};