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