首页 > 其他分享 >leetcode1047-删除字符串中的所有相邻重复项

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

时间:2022-09-18 17:56:29浏览次数:107  
标签:elements string int top 相邻 ch leetcode1047 字符串 size

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;
    }
};

 

标签:elements,string,int,top,相邻,ch,leetcode1047,字符串,size
From: https://www.cnblogs.com/uacs2024/p/16705341.html

相关文章