给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
思路:
思路和括号匹配差不多8,用栈就行。
AC代码:
class Solution {
public:
string removeDuplicates(string S) {
string S2;
for(int i=0;i<S.length();i++){
if(S2.empty()||S[i]!=S2.back()) S2.push_back(S[i]);
else S2.pop_back();
}
return S2;
}
};
//一开始姿势不熟练,用的stack…虽然也过了但是没想到效率比string实现要低这么多(评测stack600+ms、string20ms…)
//猜测是 stack里内存分配耗时太多?总之不想用stack了hhhhhhh
//下面是stack的磨叽代码orz
/*class Solution {
private:
stack<char> ans;
string S2;
public:
string removeDuplicates(string S) {
for(int i=0;i<S.length();i++){
if(ans.empty()||S[i]!=ans.top()) ans.push(S[i]);
else ans.pop();
}
while(!ans.empty()){
S2.insert(S2.begin(),ans.top());
ans.pop();
}
return S2;
}
};*/