uacs2024

导航

leetcode1047-删除字符串中的所有相邻重复项

1047. 删除字符串中的所有相邻重复项

 

方法一:stack

 这种做法是纯纯的小丑做法,因为string类型本身就可以实现栈。这样的做法结束之后还要出栈倒序放到字符串里,时间开销很大。

class Solution {
public:
    string removeDuplicates(string s) {
        int size=s.size();
        if(size==1) return s;
        stack<char> elements;
        elements.push(s[0]);
        for(int i=1;i<size;i++)
        {
            if(!elements.empty()&&s[i]==elements.top())
            {
                elements.pop();
            }
            else
            {
                elements.push(s[i]);
            }
        }
        int size2=elements.size();
        string res;res.resize(size2);
        for(int i=size2-1;i>=0;i--)
        {
            res[i] = elements.top();
            elements.pop();
        }
        return res;
    }
};

方法二:利用string类型自带的栈属性

class Solution {
public:
    string removeDuplicates(string s) {
        string res;
        int size=s.size();
        for(int i=0;i<size;i++)
        {
            if(!res.empty()&&s[i]==res.back())
            {
                res.erase(res.end()-1);
            }
            else
            {
                res.push_back(s[i]);
            }
        }
        return res;
};

方法三:字符数组原地,相当于模拟了一个栈(评论区大佬的做法,是真滴强)

class Solution {
public:
    string removeDuplicates(string S) {
        int top = 0;
        for (char ch : S) 
        {
            if (top == 0 || S[top - 1] != ch) 
            {
                S[top++] = ch;
            } 
            else 
            {
                top--;
            }
        }
        S.resize(top);
        return S;
    }
};

 根据自己对方法三的理解独立写的代码

class Solution {
public:
    string removeDuplicates(string s) {
        int size=s.size(),top=0;
        for(int i=1;i<size;i++)
        {
            if(top==-1||s[i]!=s[top])
            {
                s[++top]=s[i];
            }
            else
            {
                if(top>=0)    top--;
            }
        }
        s.resize(top+1);
        return s;
    }
};

 

posted on 2022-09-18 17:45  ᶜʸᵃⁿ  阅读(17)  评论(0编辑  收藏  举报