Bootstrap

删除字符串中的所有相邻重复项(力扣1047)

这题也是属于栈的经典应用。为什么这样说呢?因为也是让我们删除相邻项。注意这里相邻项的理解,并不仅仅是说最开始的字符串相邻的项。在我们删除了某些相邻项后,会改变字符串,导致原本不相邻的字符变成相邻的,这同样属于相邻项。这一系列比对字符再删除的流程恰好适用于用栈来解决。一些注意点我写在代码注释中。

代码如下:

class Solution {
public:
    string removeDuplicates(string s) {
       stack<char> st;
       for(int i = 0;i < s.size();i++){
        if(st.empty() || st.top() != s[i]){
               st.push(s[i]);
               continue;
        }
        st.pop();
       }
       //用来存储答案
       string result;
       //将栈里的字符拼接起来
       while(st.empty() != 1){
        result += st.top();
        st.pop();
       }
       //最后要反转顺序,因为将字符存入栈之后再弹出,栈顶对应字符串的尾部
       reverse(result.begin(),result.end());
       return result;
    }
};

;