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

简单题,但是当时第一反应没有想到比较好用的数据结构,最后才发现用栈比较合理;

 

如果不用栈,直接采用两两对比使用递归来做:

class Solution {
public:
    string fun(string s) {
        if (s.size() <= 1)
            return s;
        string ss = "";
        int st = 0, ed = 1;
        while (ed < s.size()) {
            if (s[st] == s[ed]) {
               if (s[st] == s[ed]) {
                    st = ed + 1;
                    ed = st + 1;
                }
            }
            else {
                ss += s[st];
                st++;
                ed++;
            }
        }
        if (st < s.size()) {
            ss += s[st];
        }
        if (ss.size() == s.size())
            return ss;
        else
            return fun(ss);
    }

    string removeDuplicates(string S) {
        return fun(S);
    }
};

 

稳定内存偏高;

 

如果采用栈则比较简单,其实这道题就是典型的用栈思想,如果栈顶和遍历字符相同,直接弹栈;

这里傻傻的用stack,超时,其实string模拟栈遍历一遍即可;

 

class Solution {
public:
    string removeDuplicates(string S) {
        string s;
        for (int i = 0; i < S.size(); i++) {
            if (s.size() != 0 && S[i] == s.back()) {
                s.pop_back();
            }
            else {
                s.push_back(S[i]);
            }
        }
        return s;
    }
};

  

 

posted @ 2021-03-09 20:48  暮云林凌  阅读(92)  评论(0编辑  收藏  举报