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