上海部道网站 建设竞价排名推广
原题链接: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;}
};