题目(leecode T1047):
给出由小写字母组成的字符串 S
,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
方法:删除相邻的重复字符,我们可以用栈来处理,遍历字符串时,匹配当前字符与栈顶的字符是否相同,如果相同的话,就代表他们是相邻的重复字符,那我们就把当前栈顶的元素给弹出栈。因为他是重复的元素,我们的栈里最后只放不重复的最终结果。但如果不相等的话,我们就直接将字符入栈。重复此过程直到结束,最后栈中留下的就是已经删除完所有重复元素的字符串了。我们只需要将所有的元素都弹出到结果串中,但因为栈是先进后出的结构,所以最后弹出的结果,我们需要再进行逆置的处理就是最终的结果。
class Solution {
public:string removeDuplicates(string s) {stack<char> st;for (char i : s) {if(st.empty() || i != st.top()){ st.push(i);}else{st.pop();}}string result = "";while (!st.empty()) { // 将栈中元素放到result结果串result += st.top();st.pop();}reverse (result.begin(), result.end()); // 字符串需要逆置return result;}
};