题目:
给出由小写字母组成的字符串 S
,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
思路:首先判断是否和指向字符是否和栈的top相等。
如果相等把栈的top给pop掉
如果不相等那么就把字符加入到栈中
当循环完毕时
创建一个result字符串
把栈中元素全部加入进去
然后把字符串通过函数reverse一下
看代码
class Solution {
public:
string removeDuplicates(string S) {
stack<char> st;
for (char s : S) {
if (st.empty() || s != st.top()) {
st.push(s);
} else {
st.pop(); // s 与 st.top()相等的情况
}
}
string result = "";
while (!st.empty()) { // 将栈中元素放到result字符串汇总
result += st.top();
st.pop();
}
reverse (result.begin(), result.end()); // 此时字符串需要反转一下
return result;
}
};
学到的知识:首先加深了栈的理解
还有就是发现字符串添加元素竟然可以用+=来操作
还有就是复习了函数reverse,将字符串颠倒的函数